How do I use JRUBY_OPTS with RVM?

2020-02-20 03:14发布

It seems that the idiomatic way to provide flags to JRuby in an RVM-based Rails project is to set the environmental variable JRUBY_OPTS or PROJECT_JRUBY_OPTS, the latter perhaps being done automatically, since I see I can uncomment this line from my project directory's .rvmrc:

PROJECT_JRUBY_OPTS=( --1.9 )

However, that line seems to do nothing, and if I set the environmental variables, RVM actually unsets them.

So, how am I supposed to do this?

(Note that I have this at the bottom of my .bashrc file, which is how I believe I'm supposed to use rvm:)

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

Example:

$ 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条回答
Evening l夕情丶
2楼-- · 2020-02-20 03:26

I put export JRUBY_OPTS="..." in my project's .rvmrc, at the bottom of the file. This works for me.

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]
查看更多
劳资没心,怎么记你
3楼-- · 2020-02-20 03:29

Add this line to your .bashrc file

export JRUBY_OPTS=--1.9 

It's working fine for me

查看更多
贼婆χ
4楼-- · 2020-02-20 03:32

this option was parsed with jruby nailgun hook only, i have added a new hook to parse only this options (no ng):

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

and it should work upon entering directory with this option

查看更多
时光不老,我们不散
5楼-- · 2020-02-20 03:33

Since your are using rvm just create a file .ruby-env in your directory folder. Inside the file you can define your custom env. Like:

JRUBY_OPTS=-Xcext.enabled=true
查看更多
做个烂人
6楼-- · 2020-02-20 03:37

@mpapis identified the problem and provided the fix. Here's some additional background. TL;DR: use PROJECT_JRUBY_OPTS and the jRuby hooks.

jRuby uses JRUBY_OPTS to configure jRuby's behavior.

RVM supports PROJECT_JRUBY_OPTS with two provided hook files (currently, after_use_jruby and after_use_jruby_opts). If enabled by making them executable, the hooks use the script library functions jruby_options_append and jruby_options_remove to append/remove the options in PROJECT_JRUBY_OPTS to/from JRUBY_OPTS.

So, you have two options.

If you install the latest RVM, you can roll your own per-project .rvmrc, and you can set environment variables and run commands, as you would expect. No additional steps are required.

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

And then:

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

Or you can enable the jruby hooks, generate an .rvmrc, and customize it:

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

Then:

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

And now:

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

There are subtle differences to the two approaches.

With the first approach, the changes to JRUBY_OPTS persist even if you navigate back out of the project directory. With the second approach, the project-specific options are removed from the JRUBY_OPTS environment variable when you navigate out of the project directory.

Likewise, the first case overwrites JRUBY_OPTS with the value in .rvmrc, while the second case intelligently appends the project-specific information.

@paul-biggar, unfortunately I wasn't able to duplicate the problem where RVM unset JRUBY_OPTS.

查看更多
登录 后发表回答