如何在RVM中使用JRUBY_OPTS?

10

在基于 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个回答

15

这个选项只在JRuby Nailgun Hook中解析,我添加了一个新的Hook来仅解析这个选项(不使用ng):

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

并且使用这个选项应该在进入目录时有效。


13

我在我的项目的.rvmrc文件的末尾加入了export JRUBY_OPTS="...",这对我起作用了。

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]

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的问题。

PROJECT_JRUBY_OPTS标志是rvm的一部分 - 我们使用由rvm生成的标准.rvmrc,通过查看rvm的代码,我发现它读取PROJECT_JRUBY_OPTS并将其分配给JRUBY_OPTS。但是,我尝试了您的建议,但仍然没有起作用。我认为rvm正在取消设置JRUBY_OPTS。 - Paul Biggar

5

如果你使用rvm,只需在目录文件夹中创建一个名为.ruby-env的文件。在文件中,你可以定义自己的自定义环境,例如:

JRUBY_OPTS=-Xcext.enabled=true

2
将以下这行代码添加到您的 .bashrc 文件中。
export JRUBY_OPTS=--1.9 

对我来说运行良好


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接