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



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

搜索SO,我遵循了这篇文章中选择的答案。

这是 cron 中的行,因此:

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

此命令在用户 sam 根目录的 Bash 中运行良好。

这是我脚本的突出部分:

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

这是来自 cron 的错误输出:

 X-Cron-Env: <SHELL=/bin/bash>
 X-Cron-Env: <PATH=/usr/bin:/bin>
 X-Cron-Env: <LOGNAME=sam>
 X-Cron-Env: <USER=sam>
 X-Cron-Env: <HOME=/Users/sam>
 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 中执行。有没有其他环境在起作用?

很明显,我忽略了一些东西。帮我看看它,sam

或者你可以简单地尝试

rvm cron setup # let RVM do your cron settings

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

我配置了几种不同的操作系统来使用几种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

要为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 的默认值)。

SHELLBASH_ENV的详细解释可以在丹尼尔的回答中找到。