由于在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一样运行?
答案 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工作的状态:
使用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