已安装的torquebox-server gem。
$torquebox run
没问题。程序在Apache代理Torquebox上运行正常,通过:80和SSL AJP:8009。
在这里它击中了粉丝: ' sudo service torquebox start'使用UpStart可以很好地处理一个例外。浏览器中没有错误。只是一个空白的白页。我正在使用chruby。这是扭矩箱日志:
无法要求文件:torquebox / service_registry: org.jruby.exceptions.RaiseException:(LoadError)没有要加载的此类文件 - org.jruby.RubyKernel.require中的torquebox / service_registry(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自己的日志所示。
看起来 torquebox run
执行得很好,因为jruby-1.7.19(与jruby-1.7.19上的Torquebox' sv 3.1.2运行时相同),宝石和程序都在我的下面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 .gem目录中提高了对几个文件的权限,提供了快速而又脏的方法。我甚至尝试过chown -R torquebox:torquebox /home/klyde/.rubies。那里没有运气)
问题:我必须重新安装所有程序,包括程序,在torquebox用户下,好像那样可行,无论如何?或者是否有更优雅(理智)的方法?
答案 0 :(得分: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 run'工作得很好。但是为了利用类似生产的命令 - 'sudo service torquebox start' - 我发现有必要下载二进制文件并安装在/ opt下,以便按照'upstart'的说明进行操作。
Warbler为JBoss准备一个.war文件。但是,包装JBoss的Torquebox提供了自己的代码,旨在取代.war的需求。但是,'torquebox run'或'sudo service torquebox start'都称为捆绑器。那么如何通过捆绑器放置宝石似乎很重要。将gems复制/粘贴到本机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中宝石的自然目录实际上在它自己的子文件夹中。这是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 ......
$ 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都成为它自己的宝石。如果你不反对,那么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安装。
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
Sym链接或移动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
使用rake upstart启用'sudo service torquebox start',Torquebox手册18.4服务器控制。
如果使用nokogiri:
我用1.6.1取代了nokogiri 1.6.6.2。对许多人来说,这种变化是必要的。谷歌更多信息。它出现在宝石列表中,如1.6.1-java,以及我的Gemfile(gem'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。为了那些好奇,对我来说,我应该忘记,这是我的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>
必要时修复权限。以用户'扭矩盒'运行可以克服一些首先碰到的问题。