Rake任务在Openshift上的cron作业中有错误的环境

时间:2014-03-27 07:38:37

标签: ruby cron openshift

由于在Redmine应用程序中导入电子邮件,我正在尝试在Openshift上设置一个cron作业。因此,我准备了一个像这样的小脚本:

#!/bin/bash
rake RAILS_ENV=production -f ${OPENSHIFT_REPO_DIR}/Rakefile redmine:email:receive_imap host=imap.googlemail.com port=993 ssl=1 username=xxx@artistii.com password=yyy ...

在ssh连接上手动启动时,它运行没有问题。当由cron运行时,无法找到rake。 进行一些调试,我发现路径与登录shell不一样;即使我使用了rake的完整路径,发现的ruby是版本1.8(根据盒式磁带不是1.9),每当我设置与shell相同的路径时,都找不到libruby-1.9。

根据其他一些建议,我尝试添加以下行代替设置自定义PATH:

source /usr/bin/rhcsh

但是仍然没有找到rake。我也尝试使用bundle exec。

在Openshift上为cron设置环境的正确方法是什么,以便它可以像登录shell一样运行?

3 个答案:

答案 0 :(得分:1)

您可能需要先cd到安装捆绑包的目录(Gemfile所在的目录),这可能是这样的吗?

cd $OPENSHIFT_REPO_DIR && bundle exec rake .....

答案 1 :(得分:0)

这是cron墨盒中的一个错误。你可以参考这个question in SO。这实际上是Python盒式磁带和cron盒式磁带的问题。但它是影响所有人的cron墨盒。还有一个提到的OpenShift Bug报告。

正如您所观察到的那样,cron盒使用Ruby 1.8而不是Ruby 1.9。因此,使用Ruby 1.8安装Ruby 1.9的gem不可用于cron盒。

此错误已有错误修正,您可以参考OpenShift错误报告。但不太确定它是否已被推出。

同时,通过在cron脚本中导出PATH和LD_LIBRARY_PATH,有一个临时的解决方法。您可以参考OpenShift Bug Report。

希望这有帮助。

答案 2 :(得分:0)

如果您正在使用rvm,openshift可能会遇到一些问题转移到默认rvm。您也可以尝试这样的事情,这样它会在运行bundle之前将rvm设置为默认值,并且还可以生成您的cron日志以获得确切的结果你的cron工作的状态:

https://rvm.io/rvm/install

使用bundle exec摆脱rake的多个版本

cd $OPENSHIFT_REPO_DIR && rvm gemset use "yourgemsetname" && RAILS_ENV=production bundle exec rake cron_job:cron_job --silent >> log/cron_log