我们需要在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?
答案 0 :(得分:2)
来自tty switch ruby版本:
rvm use 1.9.3
您应该使用rvm:
设置cronrvm 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