Как я могу использовать JRUBY_OPTS с RVM?

Кажется, что идиоматический способ предоставить флаги для JRuby в проекте Rails на основе RVM состоит в том, чтобы установить переменную окружения 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 ответов

Решение

Эта опция была проанализирована только с помощью крюка jruby nailgun, я добавил новый хук для разбора только этой опции (нет нг):

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

и это должно работать при входе в каталог с этой опцией

Я кладу 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]

@mpapis определил проблему и предоставил исправление. Вот дополнительный фон. TL;DR: использовать PROJECT_JRUBY_OPTS и крючки jRuby.

jRuby использует JRUBY_OPTS настроить поведение jRuby.

RVM поддерживает PROJECT_JRUBY_OPTS с двумя предоставленными файлами хуков (в настоящее время after_use_jruby а также after_use_jruby_opts). Если включено, делая их исполняемыми, хуки используют функции библиотеки скриптов jruby_options_append а также jruby_options_remove добавить / удалить параметры в PROJECT_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 переменная окружения при переходе из каталога проекта.

Аналогично, первый случай перезаписывается JRUBY_OPTS со значением в.rvmrc, тогда как во втором случае интеллектуально добавляется информация, специфичная для проекта.

@ paul-biggar, к сожалению, мне не удалось воспроизвести проблему, когда RVM не установлен JRUBY_OPTS,

Поскольку вы используете rvm, просто создайте файл.ruby-env в папке вашего каталога. Внутри файла вы можете определить свой собственный env. Подобно:

JRUBY_OPTS=-Xcext.enabled=true

Добавьте эту строку в ваш файл.bashrc

export JRUBY_OPTS=--1.9 

У меня работает нормально

Другие вопросы по тегам