【问题标题】:Installing gems for a JRuby instance which runs in cron为在 cron 中运行的 JRuby 实例安装 gems
【发布时间】: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 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
  4. 我从 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 加载路径。

标签: ruby cron gem jruby


【解决方案1】:

这个问题的答案是尝试用这个版本的 jruby results in a jruby bug in versions earlier than 1.6.2 安装typhoeus

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2014-07-05
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多