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

时间:2014-01-06 16:19:08

标签: ruby macos cron rvm powerpc

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

在SO上搜索,我已经按照post中的选择答案进行了搜索。

这是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中执行。还有其他环境在发挥作用吗?

很明显,我有一些东西可以忽略。帮帮我看看,山姆

3 个答案:

答案 0 :(得分:30)

或者您可以尝试

rvm cron setup # let RVM do your cron settings

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

答案 1 :(得分:7)

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

我首先尝试RVM's official解决问题,但在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

答案 2 :(得分:0)

要为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's answer中找到SHELLBASH_ENV的详细说明。