使用特定版本的ruby在cron上运行gem

时间:2013-12-18 03:42:29

标签: ruby bash rvm

我们需要在cron时间表上运行某个gem应用程序,因此我们有一个专门的用户设置来运行这个gem。

我们目前正在使用ruby 1.9.2

[jobrunner@test-load] rvm list
rvm rubies

   ruby-1.8.7-p299 [ x86_64 ]
   ruby-1.9.2-p180 [ x86_64 ]
=* ruby-1.9.2-p290 [ x86_64 ]
   ruby-1.9.3-p125 [ x86_64 ]
   ruby-1.9.3-p374 [ x86_64 ]
   ruby-1.9.3-p392 [ x86_64 ]
   ruby-1.9.3-p448 [ x86_64 ]
   ruby-2.0.0-p247 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

不幸的是我需要这个用户在ruby 1.9.3上运行。更改默认ruby版本不是一个选项,因为rvm是在系统范围内安装的(/usr/local/rvm/bin/rvm),系统上的其他用户依赖于1.9.2。

如果我在交互式会话中,那就像

一样简单
rvm use 1.9.3

但是,我似乎无法在非交互式会话中使用rvm use(即在crontab中)。 (我试着把它放在我的bashrc文件中并告诉cron查看我的bashrc文件。我最后自己做了叉子炸弹......)

如何通过rvm使用特定版本的ruby来获取我的crontab?

2 个答案:

答案 0 :(得分:2)

来自tty switch ruby​​版本:

rvm use 1.9.3

您应该使用rvm:

设置cron
rvm cron setup

然后你的crontab看起来像这样:

PATH="/usr/local/rvm/gems/ruby-1.9.3-p194/bin:/usr/local/rvm/gems/ruby-1.9.3-p194@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p194/bin:/usr/local/rvm/bin:/usr/local/rvm/gems/ruby-1.9.3-p194/bin:/usr/local/rvm/gems/ruby-1.9.3-p194@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p194/bin:/usr/local/rvm/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/rvm/gems/ruby-1.9.3-p194@global/"
rvm_env_string='ruby-1.9.3-p194'
rvm_path='/usr/local/rvm'
rvm_ruby_string='ruby-1.9.3-p194'
RUBY_VERSION='ruby-1.9.3-p194'
GEM_HOME='/usr/local/rvm/gems/ruby-1.9.3-p194'
GEM_PATH='/usr/local/rvm/gems/ruby-1.9.3-p194:/usr/local/rvm/gems/ruby-1.9.3-p194@global'
MY_RUBY_HOME='/usr/local/rvm/rubies/ruby-1.9.3-p194'
IRBRC='/usr/local/rvm/rubies/ruby-1.9.3-p194/.irbrc'

Cron将使用1.9.3红宝石与上述

修改

注意到我的文字在SO上格式不正确,所以我重新格式化了

答案 1 :(得分:0)

您可以从脚本中获取rvm confined ruby​​,如下所示:

#!/usr/bin/env bash

# load rvm ruby
source /usr/local/rvm/environments/ruby-1.9.3-p448@projectX

# ..... rake, ruby, whatever you need your script to do