2015-07-12 65 views
0

已安裝的扭矩箱 - 服務器寶石。Torquebox LoadError - 無此文件加載 - torquebox/Service_registry

$torquebox run沒問題。程序在Apache代理Torquebox上通過:80和SSL AJP:8009正常運行。

下面是它碰到風扇的地方: 帶有UpStart的'sudo service torquebox start'表現良好,但有一個例外。瀏覽器中沒有錯誤。只是一個空白的白頁。我正在使用chruby。這裏的torquebox日誌:

無法要求文件:torquebox/service_registry: org.jruby.exceptions.RaiseException:(LoadError)沒有這樣的文件來加載 - 在org.jruby.RubyKernel torquebox/service_registry。 require(org/jruby/RubyKernel.java:1071) [jruby.jar:] at RUBY.require(/home/klyde/.rubies/jruby-1.7.19/lib/ruby/shared/rubygems/core_ext/kernel_require .RB:54) 在RUBY(根)(:上述1)

當然,目錄和文件存在,因爲torquebox自己的日誌顯示。因爲jruby-1.7.19(與jruby-1.7.19上的Torquebox v 3.1.2運行時相同),gems和程序全部駐留在我的Ubuntu用戶'klyde'下,所以看起來似乎很好。但是這個命令僅僅用於開發/測試。當作爲服務運行時,Torquebox正在側身看'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 .gem目錄中的幾個文件中提出了權限,提供了一個快速和骯髒的治療方法。我甚至嘗試了chown -R torquebox:torquebox /home/klyde/.rubies。那裏沒有運氣)

問題:我必須重新安裝一切,包括程序,在扭矩箱用戶下,好像這​​會工作,無論如何??還是有更優雅(理智)的方法?

回答

0

解決方案:

已解決。我會回答我自己的問題。這裏有一堆我記得的提示。

問題的核心似乎是寶石路徑的問題。 See this comment.And this.儘管Ruby經理經常喜歡從紅寶石中分離寶石,例如。 〜/ .gem〜/ .rubies,當你看看Torquebox附帶的本地JRuby時,你會發現Torquebox在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,它工作得很好用 'torquebox運行'。但爲了利用類似生產的命令 - 'sudo service torquebox start' - 我發現有必要下載二進制文件並安裝在/ opt下,以便遵循「新貴」的說明。

鶯爲JBoss準備.war文件。但是包裝JBoss的Torquebox提供了自己的代碼,旨在取代.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 

注意.rubies,NOT .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_ROOT中找到的內容修改或人爲創建一個GEM_HOME和GEM_PATH。然後繼續在〜/ .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的...

​​

要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都會成爲它自己的寶石。如果您不反對,那麼chruby中的這個快速編輯將通過Torquebox嚴格的參考寶石的方式解決您的問題。你仍然可以像往常一樣在程序之間使用管理器。重新編輯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安裝。如果使用上述的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 
  • Sym鏈接或移動torquebox.conf的副本:

    /opt/torquebox/torquebox-3 .1.2 /共享/ INIT/torquebox.conf

    成:

    /etc/init/torquebox.conf

  • 然後編輯的線。 JBoss的需要清晰的路徑到其導通按鈕,standalone.sh:

    /opt/torquebox/current/jboss/bin/standalone.sh >> /var/log/torquebox/torquebox.log 2>&1 
    
  • 啓用「須藤服務torquebox啓動」與耙暴發戶,Torquebox手動18.4服務器控制。通過引入nokogiri

  • 如果:

  • 我換成引入nokogiri 1.6.6.2與1.6.1。對許多人來說,這種改變是必要的。谷歌它的更多信息。這在gem列表中顯示爲1.6.1-java,並在我的Gemfile(gem'nokogiri','1.6.1-java')中出現。您可能需要刪除(刪除)Gemfile.lock的內容,並直接編輯它 - nokogiri(1.6.1-java)。 「$的JRuby -S捆綁」直接編輯後,將不會覆蓋Gemfile.lock的,如將「捆綁安裝或更新」:

    $jruby -S gem install nokogiri 1.6.1 
    

    這個網站通常是在SSL。對於那些好奇,對我的緣故,我應該忘記,這裏是我的Apache代理Torquebox樣子:

    /etc/apache2/sites-available/example.conf:

    <VirtualHost example.com:80> 
        ServerAdmin [email protected] 
        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 [email protected] 
         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> 
    

    必要時修復權限。以用戶'扭矩箱'運行可能會克服一些首先碰到的問題。

    +0

    在上面的帶有指令ProxyRequests ProxyPreserveHost是不必要的,更不用說Order和Allow在Apache 2.4中並不與Require一起使用。我只使用Proxypass線。 – forresttales

    相關問題