解決方案:
已解決。我會回答我自己的問題。這裏有一堆我記得的提示。
問題的核心似乎是寶石路徑的問題。 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中應用相同的補救措施。
安裝Ruby和JRuby:我使用chruby或'ruby-install',並在〜/下安裝rubies。使用紅寶石/ jrubies進入〜/ .rubies。
安裝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>
必要時修復權限。以用戶'扭矩箱'運行可能會克服一些首先碰到的問題。
在上面的帶有指令ProxyRequests ProxyPreserveHost是不必要的,更不用說Order和Allow在Apache 2.4中並不與Require一起使用。我只使用Proxypass線。 –
forresttales