Как я могу использовать 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
У меня работает нормально