为在cron中运行的JRuby实例安装gem

时间:2015-05-21 17:15:22

标签: ruby cron gem jruby

问题

我的目标是为在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 environmentanother SO post about specifying gem install directories的输出,

  1. 我暂时将$GEM_HOME更改为我有权访问的目录(/home/user/.gem/jruby/1.8)。
  2. 我跑了/home/user/rubies/jruby-1.6.1/bin/jruby -S gem install typhoeus
  3. 我使用/home/user/rubies/jruby-1.6.1/bin/jruby -S gem list检查了typhoeus,我在输出中看到了 typhoeus
  4. 我从cron运行相同的命令,在其保存到文件的输出中看到typhoeus
  5. 从cron运行jruby的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不在那里的脚本)。

1 个答案:

答案 0 :(得分:0)

答案是尝试使用此版本的jruby results in a jruby bug in versions earlier than 1.6.2安装typhoeus

我只是通过从crontab运行gem install typhoeus时将stderr重定向到cron中的输出文件来见证。 (我之前只重定向过stdout)。