如何在RVM中使用JRUBY_OPTS?

时间:2011-11-27 02:53:36

标签: jruby rvm jrubyonrails

似乎在基于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]

5 个答案:

答案 0 :(得分:15)

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

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

并且在使用此选项输入目录时应该有效

答案 1 :(得分:13)

我将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 :(得分:5)

@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

所以,你有两个选择。

如果您安装了最新的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的问题。

答案 3 :(得分:4)

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

JRUBY_OPTS=-Xcext.enabled=true

答案 4 :(得分:2)

将此行添加到.bashrc文件

export JRUBY_OPTS=--1.9 

它对我来说很好用