在RVM环境中的Ruby cron作业中找不到Gem

我正在尝试在RVM环境中运行10.5的旧PPC机器上运行一个简单的ruby脚本。

搜索SO,我按照这篇文章中选择的答案。

这是cron中的一行:

SHELL=/bin/bash 00 * * * * BASH_ENV=~/.bash_profile && /bin/bash -c '~/deggy/onlineGW.rb' 

这个命令在用户山姆根的Bash中运行良好。

这是我脚本的重要部分:

  #!/usr/bin/env ruby require 'open-uri' require 'nokogiri' ... 

这是来自cron的错误输出:

  X-Cron-Env:  X-Cron-Env:  X-Cron-Env:  X-Cron-Env:  X-Cron-Env:  Date: Mon, 6 Jan 2014 03:15:00 -0600 (CST) /Users/sam/deggy/onlineGW.rb:3:in `require': no such file to load -- nokogiri (LoadError) 

好的,因为我正在运行RVM,我已将默认ruby设置为1.9.3,如上所述,该命令在终端中执行,但不在cron中执行。 还有其他环境吗?

很明显,我忽略了一些东西。 山姆,请帮我看看

我配置了几个不同的操作系统来处理几个CRON风格和RVM。

我首先尝试了RVM的官方解决方案,但在FreeBSD和Gentoo下无法正常工作。 我必须手动添加所有相关路径,如下所示,但首先输入crontab -e以启动crontab编辑器[1]:

 # atmat's crontab configuration SHELL=/bin/bash PATH=/home/atma/.rvm/gems/ruby-1.9.3-p0/bin:/home/atma/.rvm/gems/ruby-1.9.3-p0@global/bin:/home/atma/.rvm/rubies/ruby-1.9.3-p0/bin:/home/atma/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.5.3 RUBYLIB=/home/atma/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1 GEM_HOME='/home/atma/.rvm/gems/ruby-1.9.3-p0' GEM_PATH='/home/atma/.rvm/gems/ruby-1.9.3-p0:/home/atma/.rvm/gems/ruby-1.9.3-p0@global' RUBYOPT=rubygems %nightly,mail(no) * 8-9 /home/atma/.rvm/rubies/ruby-1.9.3-p0/bin/ruby /usr/local/bin/morula -s username update 

上面的例子在Gentoo GNU / Linux下工作,使用fcron为标准cron提供了一个更灵活,美观和强大的解决方案,但是可以与任何cron一起使用。

[1]此命令将使用您的默认系统编辑器打开crontab

或者你可以试试

rvm cron setup # let RVM do your cron settings

这对我有用。 通过https://coderwall.com/p/vhv8aw

要为cron作业加载默认的RVM ruby​​环境,这里是我为用户模式RVM设置的,假设用户是ohho ,主文件夹是/home/ohho 。 要编辑,请在命令行中输入crontab -e

 MAILTO="" SHELL=/bin/bash BASH_ENV=/home/ohho/.bash_profile HOME=/home/ohho * * * * * rails -v > /home/ohho/env.txt 

最后一行是用于测试rails (如果已安装)可以正确调用。 您还应该检查~/.bash_profile是否加载RVM环境(这是bash的默认设置)。

在Daniel的回答中可以找到SHELLBASH_ENV详细解释。