Torquebox LoadError - нет такого файла для загрузки - Toronbox/Service_registry
Установлен крутящий момент на сервере гем.
$torquebox run
в порядке Программа отлично работает на прокси-сервере Apache Torquebox через:80 и SSL AJP:8009.
Вот где он попадает в вентилятор: "запуск sudo service Torboxbox" с UpStart ведет себя хорошо, за одним исключением. Нет ошибок в браузере. Просто пустая белая страница. Я использую Chruby. Вот журнал крутящего момента:
Невозможно запросить файл: momentbox/service_registry: org.jruby.exceptions.RaiseException: (LoadError) нет такого файла для загрузки --моментальный ящик / service_registry на org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1071) [jruby.jar:] в RUBY.require(/home/klyde/.rubies/jruby-1.7.19/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:54) в RUBY (корневой)(:1)
Конечно, каталог и файл выше существуют, как показывает собственный журнал в Torbox.
torquebox run
Казалось бы, работает нормально, потому что jruby-1.7.19 (то же самое, что и среда выполнения Torquebox v 3.1.2 на jruby-1.7.19), gems и программа находятся под моим пользователем Ubuntu 'klyde'. Но эта команда только для разработки / тестирования. Работая как сервис, Torquebox смотрит в сторону пользователя "коробки крутящего момента" со своим собственным bashrc. Да, Torquebox требует своего собственного пользователя! Таким образом, для обоих пользователей, klyde и Torquebox, bashrc содержат одно и то же:
export TORQUEBOX_HOME=/home/klyde/.gem/jruby/1.9.3/gems/torquebox-server-3.1.2-java
export TORQUEBOX_HOME_RAKE_SUPPORT=/home/klyde/.gem/jruby/1.9.3/gems/torquebox-rake-support-3.1.2
export TORQUEBOX_SERVER=/home/klyde/.gem/jruby/1.9.3/gems/torquebox-server-3.1.2-java
export JBOSS_HOME=$TORQUEBOX_SERVER/jboss
export JRUBY_HOME=/home/klyde/.rubies/jruby-1.7.19
export PATH=$JRUBY_HOME/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
Я читал, что Torquebox предвидит пути и т. Д. Через собственную версию среды исполнения jruby, в отличие от того, что может делать chruby (или rvm, rbenv). В этом духе я добавил пользователя крутящего момента в группу klyde. Я поднял разрешения для пары файлов в моей директории klyde .gem, обеспечивая быстрое и грязное лечение. Я даже попробовал крутящий момент chown -R: крутящий момент /home/klyde/.rubies. Не повезло)
Вопрос: Должен ли я переустанавливать все, включая программу, под пользователем крутящего момента, как если бы это работало? Или есть более элегантный (вменяемый) подход?
1 ответ
Решение:
Решаемые. Я отвечу на свой вопрос. Вот куча советов, которые я помню.
Суть дела, похоже, в проблеме драгоценного камня. Смотрите этот комментарий. И это. Принимая во внимание, что менеджеры Ruby часто любят отделять драгоценные камни от рубинов, например. ~/.gem ~/.rubies, когда вы посмотрите на собственный JRuby, который поставляется с Torquebox, вы увидите, что Torquebox спрятал драгоценные камни в собственных подпапках JRuby:
/opt/torquebox/torquebox-3.1.2/jruby/lib/ruby/gems/shared/gems/
В доказательство этого вы увидите, что бинарная загрузка Torquebox включает в себя набор гемов 'drumbox-server'.
Я использовал Chruby и побежал:
$ jruby -S gem install torquebox-server
И, как и в случае с RVM, он работал нормально, используя "запуск коробки передач". Но чтобы воспользоваться производственными командами - "sudo service Toronbox Start" - я счел необходимым загрузить двоичный файл и установить его в / opt, чтобы следовать инструкциям для "upstart".
Славка готовит файл.war для JBoss. Но Torquebox, который упаковывает JBoss, предоставляет собственный код, предназначенный для замены необходимости.war. Тем не менее, как 'запуск крутящего момента', так и 'запуск крутящего момента в сервисном центре sudo' вызывают сборщик. Так что, как драгоценные камни размещаются через упаковщик, кажется важным. Копирование / вставка драгоценных камней в нативный JRuby (/opt/torquebox/torquebox-3.1.2/jruby...) может не работать (как я обнаружил).
Предполагая, что вы (разумно) хотите использовать свой собственный JRuby в ~/, и после того, как переменные окружения установлены (как я покажу), затем из терминала вы захотите увидеть что-то вроде этого:
$ jruby -S gem env
RubyGems Environment:
- RUBYGEMS VERSION: 2.4.5
- RUBY VERSION: 1.9.3 (2015-01-29 patchlevel 551) [java]
- INSTALLATION DIRECTORY: /home/klyde/.rubies/jruby-1.7.19/lib/ruby/gems/shared
- RUBY EXECUTABLE: /home/klyde/.rubies/jruby-1.7.19/bin/jruby
- EXECUTABLE DIRECTORY: /home/klyde/.rubies/jruby-1.7.19/bin
- SPEC CACHE DIRECTORY: /home/klyde/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /home/klyde/.rubies/jruby-1.7.19/etc
- GEM PATHS:
- /home/klyde/.rubies/jruby-1.7.19/lib/ruby/gems/shared
Обратите внимание.rubs, НЕ.gem.
Если RVM или rbenv или chruby включены, он попытается управлять GEM_HOME. Это должно быть отключено. Одно предложение, посмотрите в /etc/profile.d/
Из любого каталога GEM_HOME должен быть пустым или, по крайней мере, указывать путь в подпапках вашего JRuby.
В качестве теста:
$ echo $GEM_HOME
(here we can have a blank line)
И в ~/.gemrc
install: --no-ri --no-rdoc
update: --no-ri --no-rdoc
gemhome: /home/klyde/.rubies/jruby-1.7.19/lib/ruby/gems/shared
gempath: /home/klyde/.rubies/jruby-1.7.19/lib/ruby/gems/shared
Хотя приведенные выше ручные изменения будут работать, как бы не цивилизованно!) Особенно в разработке, удобно использовать менеджер, чтобы переключать рубины для каждой программы. Чтобы получить лучшее из обоих миров, я буду использовать Chruby в качестве примера.
Естественный каталог для драгоценных камней в ruby / jruby находится в своих собственных подпапках. Это GEM_ROOT. И GEM_ROOT остается постоянным. chruby изменяет или искусственно создает GEM_HOME и GEM_PATH из того, что он находит в GEM_ROOT. Затем он продолжает собирать драгоценные камни в ~/.gem. Заметим:
$ echo $GEM_ROOT
/home/klyde/.rubies/ruby-2.2.2/lib/ruby/gems/2.2.0
$ echo $GEM_HOME
/home/klyde/.gem/ruby/2.2.2
$ echo $GEM_PATH
/home/klyde/.gem/ruby/2.2.2:/home/clyde/.rubies/ruby-2.2.2/lib/ruby/gems/2.2.0
И для Джруби...
$ echo $GEM_ROOT
/home/klyde/.rubies/jruby-1.7.19/lib/ruby/gems/shared
$ echo $GEM_HOME
/home/klyde/.gem/jruby/1.9.3
$ echo $GEM_PATH
/home/klyde/.gem/jruby/1.9.3:/home/clyde/.rubies/jruby-1.7.19/lib/ruby/gems/shared
Чтобы переопределить это в Chruby:
/usr/local/share/chruby/chruby.sh
function chruby_use()
{
....
if (( $UID != 0 )); then
# export GEM_HOME="$HOME/.gem/$RUBY_ENGINE/$RUBY_VERSION"
# export GEM_PATH="$GEM_HOME${GEM_ROOT:+:$GEM_ROOT}${GEM_PATH:+:$GEM_PATH}"
# export PATH="$GEM_HOME/bin${GEM_ROOT:+:$GEM_ROOT/bin}:$PATH"
export GEM_HOME="$GEM_ROOT"
export GEM_PATH="$GEM_ROOT"
export PATH=$GEM_HOME/bin:$PATH
export PATH=$GEM_PATH/bin:$PATH
fi
}
Каждый рубин / jruby становится своим собственным драгоценным камнем. Если вы не против этого, это быстрое редактирование в chruby решит вашу проблему со строгим способом Torquebox ссылаться на драгоценные камни. И вы все равно сможете использовать менеджер как обычно между программами. Повторно отредактировав chruby.sh, вы можете вернуть диспетчеру его поведение по умолчанию. Это так просто!)
Зная эту маленькую хитрость, связанную с GEM_ROOT, возможно, такое же средство можно было бы применить в RVM и rbenv.
Установите Ruby и JRuby: я использую chruby или 'ruby-install' и устанавливаю рубины в ~ /. Используя любой из них, рубины /jrubies переходят в ~/.rubies.
Установка бинарного Torquebox: На Ubuntu 14.04 я строго следовал руководству Torquebox 21.1.2 Установка Torquebox.
Env vars: При использовании трюка GEM_ROOT, описанного выше, RUBY_HOME и JRUBY_HOME, вероятно, можно игнорировать.
/etc/profile.d/torquebox.sh:
export TORQUEBOX_HOME=/opt/torquebox/current
export JBOSS_HOME=$TORQUEBOX_HOME/jboss
export JRUBY_HOME=/home/klyde/jruby-1.7.19
PATH=$JBOSS_HOME/bin:$JRUBY_HOME/bin:$PATH
Я также отредактировал... / etc / profile
export TORQUEBOX_HOME=/opt/torquebox/current
export JBOSS_HOME=$TORQUEBOX_HOME/jboss
export JRUBY_HOME=/home/klyde/jruby-1.7.19
PATH=$JBOSS_HOME/bin:$JRUBY_HOME/bin:$PATH
export RUBY_HOME=/home/klyde/ruby-2.2.2
export PATH=$RUBY_HOME/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
Сим-ссылка или переместить копию Torquebox.conf:
/opt/torquebox/torquebox-3.1.2/share/init/torquebox.conf
в:
/etc/init/torquebox.conf
Затем отредактируйте строку. JBoss нужен четкий путь к кнопке включения standalone.sh:
/opt/torquebox/current/jboss/bin/standalone.sh >> /var/log/torquebox/torquebox.log 2>&1
Включите запуск sudo service Torxbox с помощью граблей, руководство Torquebox 18.4 Управление сервером.
При использовании нокогири:
Я заменил нокогири 1.6.6.2 на 1.6.1. Для многих это изменение было необходимо. Google это для получения дополнительной информации. Это появляется в списке драгоценных камней как 1.6.1-java, а в моем Gemfile (гем 'nokogiri', '1.6.1-java'). Возможно, вам придется удалить (удалить) содержимое Gemfile.lock, а также напрямую отредактировать его - nokogiri (1.6.1-java). "$jruby -S bundle" не будет перезаписывать Gemfile.lock после прямого редактирования, как и "пакетная установка или обновление":
$jruby -S gem install nokogiri 1.6.1
Этот сайт обычно под SSL. Ради этих любопытных, и для меня, если я когда-нибудь забуду, вот как выглядит мой Torquebox для прокси-сервера Apache:
/etc/apache2/sites-available/example.conf:
<VirtualHost example.com:80>
ServerAdmin webmaster@localhost
ServerName example.com
Redirect / https://example.com
</VirtualHost>
/etc/apache2/sites-available/example-ssl.conf:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/certs/16746xxxxxbbac.crt
SSLCertificateChainFile /etc/apache2/ssl/certs/sf_bundle-g2-g1.crt
SSLCertificateKeyFile /etc/apache2/ssl/private/ks.key
ServerAdmin webmaster@localhost
ServerName example.com
ServerAlias example.com
DocumentRoot /home/klyde/ror/exampleprog/public
ProxyRequests Off
ProxyPreserveHost On
ProxyPassReverseCookiePath / /
ProxyPass /errors/ !
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
<Proxy *>
AddDefaultCharset off
Require all granted
Order allow,deny
Allow from all
</Proxy>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
</VirtualHost>
</IfModule>
/opt/torquebox/torquebox-3.1.2/jboss/standalone/configuration
<subsystem xmlns='urn:jboss:domain:web:1.4' default-virtual-server='default-host' native='false'>
<connector name='http' protocol='HTTP/1.1' scheme='http' socket-binding='http'/>
<connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding='ajp' />
<virtual-server name='default-host'>
<alias name='localhost'/>
<alias name='example.com'/>
</virtual-server>
</subsystem>
Исправьте разрешения при необходимости. Работа в качестве пользователя "коробки крутящего момента" может преодолеть некоторые из этих проблем, которые возникают в первую очередь.