【发布时间】:2015-05-21 17:15:21
【问题描述】:
问题
我的目标是为在 cron 中运行的 JRuby 脚本安装 gem。那颗宝石是typhoeus。
信息
这是env 的输出,从 cron 运行:
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 - 我从 cron 运行相同的命令,不要在我保存到文件的输出中看到
typhoeus
运行 jruby 的 gem install 来自 cron
哈基,我知道。我从 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 仍然不会显示台风。 (当然,我试图在库上运行的脚本不存在)。
【问题讨论】:
-
你试过使用捆绑器吗?它专门为您管理 gem 加载路径。