如何在RVM中使用JRUBY_OPTS?

Pau*_*gar 10 jruby jrubyonrails rvm

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

PROJECT_JRUBY_OPTS=( --1.9 )
Run Code Online (Sandbox Code Playgroud)

但是,该行似乎什么都不做,如果我设置环境变量,RVM实际上取消了它们.

那么,我该怎么做呢?

(请注意,我在.bashrc文件的底部有这个,这是我相信我应该使用rvm :)

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session.
Run Code Online (Sandbox Code Playgroud)

例:

$ 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]
Run Code Online (Sandbox Code Playgroud)

mpa*_*pis 15

这个选项只用jruby nailgun钩子解析,我添加了一个新的钩子来解析这个选项(没有ng):

rvm get head
chmod +x ${rvm_path}/hooks/after_use_jruby_opts
Run Code Online (Sandbox Code Playgroud)

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


All*_*ner 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]
Run Code Online (Sandbox Code Playgroud)


tod*_*ted 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_remove追加/删除选项PROJECT_JRUBY_OPTS供/ JRUBY_OPTS.

所以,你有两个选择.

如果您安装了最新的RVM,则可以滚动自己的每个项目.rvmrc,并且可以设置环境变量并运行命令,如您所料.无需其他步骤.

$ cat >> ~/tmp/.rvmrc
export JRUBY_OPTS='--1.9'
^D
Run Code Online (Sandbox Code Playgroud)

然后:

$ cd ~/tmp
$ env | grep OPTS
JRUBY_OPTS='--1.9'
Run Code Online (Sandbox Code Playgroud)

或者您可以启用jruby挂钩,生成.rvmrc并自定义它:

$ chmod +x ${rvm_path}/hooks/after_use_jruby_opts # or after_use_jruby
Run Code Online (Sandbox Code Playgroud)

然后:

$ cd ~/tmp
$ rvm --rvmrc --create jruby@projectxyz # edit the resulting .rvmrc, uncomment PROJECT_JRUBY_OPTS
Run Code Online (Sandbox Code Playgroud)

现在:

$ cd ~/tmp
$ env | grep OPTS
JRUBY_OPTS='--1.9'
Run Code Online (Sandbox Code Playgroud)

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

使用第一种方法,JRUBY_OPTS即使您导航回项目目录,更改也会持续存在.使用第二种方法,JRUBY_OPTS当您导航出项目目录时,将从环境变量中删除特定于项目的选项.

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

@ paul-biggar,遗憾的是我无法复制RVM未设置的问题JRUBY_OPTS.


ras*_*afi 5

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

JRUBY_OPTS=-Xcext.enabled=true
Run Code Online (Sandbox Code Playgroud)