我的目标是为在cron中运行的JRuby脚本安装gem。那颗宝石是typhoeus
。
以下是从{cron:
运行的env
的输出
SHELL=/bin/sh
USER=user
PATH=/usr/bin:/bin
JRUBY_HOME=/home/user/rubies/jruby-1.6.1
JAVA_HOME=/usr/java/default
SHLVL=1
HOME=/home/user
OLDPWD=/home/user
_=/usr/bin/env
运行$JRUBY_HOME/bin/jruby -S gem environment
会产生以下结果:
RubyGems Environment:
- RUBYGEMS VERSION: 1.5.1
- RUBY VERSION: 1.8.7 (2011-04-12 patchlevel 330) [java]
- INSTALLATION DIRECTORY: /home/user/rubies/jruby-1.6.1/lib/ruby/gems/1.8
- RUBY EXECUTABLE: /home/user/rubies/jruby-1.6.1/bin/jruby
- EXECUTABLE DIRECTORY: /home/user/rubies/jruby-1.6.1/bin
- RUBYGEMS PLATFORMS:
- ruby
- universal-java-1.6
- GEM PATHS:
- /home/user/rubies/jruby-1.6.1/lib/ruby/gems/1.8
- /home/user/.gem/jruby/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- "install" => "--no-rdoc --no-ri --env-shebang"
- "update" => "--no-rdoc --no-ri --env-shebang"
- REMOTE SOURCES:
- http://rubygems.org/
GEM_HOME
以匹配cron的jruby 鉴于以上gem environment
和another SO post about specifying gem install directories的输出,
$GEM_HOME
更改为我有权访问的目录(/home/user/.gem/jruby/1.8
)。/home/user/rubies/jruby-1.6.1/bin/jruby -S gem install typhoeus
。/home/user/rubies/jruby-1.6.1/bin/jruby -S gem list
检查了typhoeus,我在输出中看到了 typhoeus
typhoeus
gem install
Hacky,我知道。我从cron内部运行/home/user/rubies/jruby-1.6.1/bin/jruby -S gem install typhoeus --verbose
并将以下内容转储到文件中:
GET http://rubygems.org/latest_specs.4.8.gz
302 Moved Temporarily
GET http://production.s3.rubygems.org/latest_specs.4.8.gz
200 OK
Installing gem ffi-1.9.8-java
但是,从cron运行/home/user/rubies/jruby-1.6.1/bin/jruby -S gem install list
并不会显示出来。 (当然,我试图让库中的barfs不在那里的脚本)。
答案 0 :(得分:0)
答案是尝试使用此版本的jruby results in a jruby bug in versions earlier than 1.6.2安装typhoeus
。
我只是通过从crontab运行gem install typhoeus
时将stderr重定向到cron中的输出文件来见证。 (我之前只重定向过stdout)。