【问题标题】:How do I use JRUBY_OPTS with RVM?如何将 JRUBY_OPTS 与 RVM 一起使用?
【发布时间】:2012-01-07 04:07:18
【问题描述】:

似乎在基于 RVM 的 Rails 项目中向 JRuby 提供标志的惯用方法是设置环境变量 JRUBY_OPTS 或 PROJECT_JRUBY_OPTS,后者可能是自动完成的,因为我看到我可以从项目目录的.rvmrc:

PROJECT_JRUBY_OPTS=( --1.9 )

但是,该行似乎什么也没做,如果我设置环境变量,RVM 实际上会取消设置。

那么,我该怎么做呢?

(请注意,我的 .bashrc 文件底部有这个,我认为我应该使用 rvm:)

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session.

示例:

$ JRUBY_OPTS=--1.9 jruby -v
jruby 1.6.5 (ruby-1.9.2-p136) (2011-10-25 9dcd388) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_27) [darwin-x86_64-java]

$ export JRUBY_OPTS=--1.9
$ jruby -v
jruby 1.6.5 (ruby-1.8.7-p330) (2011-10-25 9dcd388) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_27) [darwin-x86_64-java]
$ env | grep JRUBY_OPTS
[empty result]

【问题讨论】:

    标签: jruby rvm jrubyonrails


    【解决方案1】:

    我将export JRUBY_OPTS="..." 放入我项目的.rvmrc 文件底部。这对我有用。

    export JRUBY_OPTS="--1.9 -J-XX:+CMSClassUnloadingEnabled -J-XX:+UseConcMarkSweepGC -J-XX:MaxPermSize=256m -J-Xmx1024m"
    
    $ jruby -v
    jruby 1.6.5 (ruby-1.9.2-p136) (2011-10-25 9dcd388) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_29) [darwin-x86_64-java]
    

    【讨论】:

      【解决方案2】:

      @mpapis 发现了问题并提供了修复。这里有一些额外的背景。 TL;DR:使用 PROJECT_JRUBY_OPTS 和 jRuby 挂钩。

      jRuby 使用JRUBY_OPTS 来配置 jRuby 的行为。

      RVM 支持PROJECT_JRUBY_OPTS,提供了两个挂钩文件(当前为after_use_jrubyafter_use_jruby_opts)。如果通过使它们可执行来启用,则挂钩使用脚本库函数jruby_options_appendjruby_options_removePROJECT_JRUBY_OPTS 中的选项附加到JRUBY_OPTS 或从JRUBY_OPTS 删除。

      所以,你有两个选择。

      如果您安装了最新的 RVM,您可以滚动您自己的每个项目的 .rvmrc,并且您可以设置环境变量和运行命令,正如您所期望的那样。不需要额外的步骤。

      $ cat >> ~/tmp/.rvmrc
      export JRUBY_OPTS='--1.9'
      ^D
      

      然后:

      $ cd ~/tmp
      $ env | grep OPTS
      JRUBY_OPTS='--1.9'
      

      或者您可以启用 jruby 钩子,生成 .rvmrc 并对其进行自定义:

      $ chmod +x ${rvm_path}/hooks/after_use_jruby_opts # or after_use_jruby
      

      然后:

      $ cd ~/tmp
      $ rvm --rvmrc --create jruby@projectxyz # edit the resulting .rvmrc, uncomment PROJECT_JRUBY_OPTS
      

      现在:

      $ cd ~/tmp
      $ env | grep OPTS
      JRUBY_OPTS='--1.9'
      

      这两种方法存在细微差别。

      使用第一种方法,即使您导航回项目目录,对 JRUBY_OPTS 的更改仍然存在。使用第二种方法时,当您离开项目目录时,会从 JRUBY_OPTS 环境变量中删除项目特定的选项。

      同样,第一种情况会用 .rvmrc 中的值覆盖JRUBY_OPTS,而第二种情况会智能地附加项目特定信息。

      @paul-biggar,不幸的是我无法复制 RVM 未设置 JRUBY_OPTS 的问题。

      【讨论】:

      • PROJECT_JRUBY_OPTS 标志是 rvm 的一部分 - 我们使用 rvm 生成的标准 .rvmrc,查看 rvm 的代码,我看到它读取 PROJECT_JRUBY_OPTS 并将其分配给 JRUBY_OPTS。但是,我确实尝试了您的建议,但它仍然没有用。我认为 rvm 正在取消设置 JRUBY_OPTS。
      【解决方案3】:

      此选项仅使用 jruby nailgun 钩子解析,我添加了一个新钩子来仅解析此选项(无 ng):

      rvm get head
      chmod +x ${rvm_path}/hooks/after_use_jruby_opts
      

      它应该在使用此选项进入目录时起作用

      【讨论】:

        【解决方案4】:

        将此行添加到您的 .bashrc 文件中

        export JRUBY_OPTS=--1.9 
        

        对我来说很好用

        【讨论】:

          【解决方案5】:

          由于您使用的是 rvm,因此只需在您的目录文件夹中创建一个 .ruby-env 文件。 在文件中,您可以定义您的自定义环境。 喜欢:

          JRUBY_OPTS=-Xcext.enabled=true
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-02-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-07-08
            • 1970-01-01
            • 1970-01-01
            • 2011-04-08
            相关资源
            最近更新 更多