【问题标题】:Torquebox LoadError - no such file to load -- torquebox/Service_registryTorquebox LoadError - 没有要加载的文件——torquebox/Service_registry
【发布时间】:2015-07-12 04:30:06
【问题描述】:

安装了扭矩箱服务器 gem。

$torquebox run 没问题。程序通过 :80 和 SSL AJP :8009 在 Apache 代理 Torquebox 上运行良好。

这里是它击中粉丝的地方: 带有 UpStart 的“sudo service torquebox start”表现良好,但有一个例外。浏览器没有错误。只是一张空白的白页。我正在使用 chruby。这是扭矩箱日志:

无法要求文件:torquebox/service_registry: org.jruby.exceptions.RaiseException: (LoadError) 没有要加载的文件 --torquebox/service_registry at 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.(root)(:1)

当然,上面的目录和文件是存在的,如torquebox自己的日志所示。

torquebox run 执行得很好,看起来,因为 jruby-1.7.19(与 jruby-1.7.19 上的 Torquebox v 3.1.2 运行时相同)、gems 和程序都驻留在我的 Ubuntu 用户“klyde”下.但此命令仅用于开发/测试。当作为服务运行时,Torquebox 使用自己的 bashrc 侧身查看“torquebox”用户。是的,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 torquebox:torquebox /home/klyde/.rubies。那里没有运气)

问题:我必须重新安装所有东西,包括程序,在扭矩箱用户下,好像这​​样可以工作,无论如何?还是有更优雅(理智)的方法?

【问题讨论】:

    标签: ssl jboss jrubyonrails torquebox


    【解决方案1】:

    解决办法:

    解决了。我会回答我自己的问题。这是我记得的一堆技巧。

    问题的核心似乎是 gem 路径的问题。 See this comment. And this. Ruby 经理经常喜欢将宝石与红宝石分开,例如。 ~/.gem ~/.rubies,当您查看 Torquebox 附带的原生 JRuby 时,您会发现 Torquebox 将 gem 隐藏在 JRuby 自己的子文件夹中:

    /opt/torquebox/torquebox-3.1.2/jruby/lib/ruby/gems/shared/gems/

    作为证明,您会看到 Torquebox 二进制下载包含 gem 套件“torquebox-server”。

    我用过chruby然后跑了:

    $ jruby -S gem install torquebox-server
    

    和 RVM 一样,它使用“扭矩箱运行”运行良好。但是为了利用类似生产的命令 - 'sudo service torquebox start' - 我发现有必要下载二进制文件并安装在 /opt 下,以便遵循'upstart' 的说明。

    Warbler 为 JBoss 准备了一个 .war 文件。但是封装了 JBoss 的 Torquebox 提供了自己的代码,旨在取代 .war 的需要。但是,'torquebox run' 或 'sudo service torquebox start' 调用捆绑器。所以如何通过捆绑器放置宝石似乎很重要。将 gem 复制/粘贴到本机 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
    

    注意 .rubies,而不是 .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 中 gems 的自然目录实际上是在它自己的子文件夹中。这是 GEM_ROOT。并且 GEM_ROOT 保持不变。 chruby 会根据它在 GEM_ROOT 中找到的内容更改或人为地创建 GEM_HOME 和 GEM_PATH。然后它继续在 ~/.gem 下归档 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
    

    对于 jruby...

    $ 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
    }
    

    每个 ruby​​/jruby 都成为自己的 gemset。如果您不反对,这个在 chruby 中的快速编辑将通过 Torquebox 引用 gem 的严格方式解决您的问题。而且您仍然可以在程序之间照常使用管理器。重新编辑chruby.sh,可以让管理器恢复到默认行为。就是这么简单!)

    知道了这个涉及 GEM_ROOT 的小技巧,也许同样的补救措施可以应用于 RVM 和 rbenv。

    1. 安装 Ruby 和 JRuby:我使用 chruby 或 'ruby-install',并在 ~/.使用其中一个,rubies/jrubies 进入 ~/.rubies。

    2. 安装 Torquebox 二进制文件:在 Ubuntu 14.04 上,我完全按照 Torquebox 手册 21.1.2 Torquebox 安装。

    3. 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/配置文件

    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
    
    1. 符号链接或移动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
    
    1. 使用 rake upstart 启用“sudo service torquebox start”,Torquebox manual 18.4 Server control。

    2. 如果使用 nokogiri:

    我用 1.6.1 替换了 nokogiri 1.6.6.2。对于许多人来说,这种改变是必要的。谷歌它以获取更多信息。这在 gem 列表中显示为 1.6.1-java,在我的 Gemfile 中(gem 'nokogiri', '1.6.1-java')。您可能必须清除(删除)Gemfile.lock 的内容,以及直接编辑它 - nokogiri (1.6.1-java)。 '$jruby -S bundle' 不会在直接编辑后覆盖 Gemfile.lock,'bundle install or update' 也一样:

    $jruby -S gem install nokogiri 1.6.1
    

    本网站通常采用 SSL。为了那些好奇的人,对我来说,我是否应该忘记,这是我的 Apache 代理 Torquebox 的样子:

    /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>
    

    必要时修复权限。以用户 'torquebox' 的身份运行可能会克服一些最先遇到的问题。

    【讨论】:

    • 在上面,带有指令、ProxyRequests、ProxyPreserveHost 的 是不必要的,更不用说,在 Apache 2.4 中,Order 和 Allow 不与 Require 一起使用。我只使用 Proxypass 线路。
    猜你喜欢
    • 1970-01-01
    • 2014-01-16
    • 2011-02-23
    • 2013-12-14
    • 2011-12-19
    • 2011-11-30
    • 2016-05-09
    • 2023-03-03
    相关资源
    最近更新 更多