每当PATH在crontab文件中为rails 3 ubuntu
我正在使用带有rails 3的gem。在我的生产服务器(ubuntu)上,运行器任务不会运行。 我尝试将:set job_template
为获取-l -i
, 如此github票证中所述 。 然而,这并没有解决问题。
这个特定的生产ubuntu的问题是echo $PATH
没有ruby路径:
echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
而ruby路径是/var/rails/myapp/shared/bundle/ruby/1.8/bin
所以如果我手动编辑crontab文件并添加PATH=/var/rails/myapp/shared/bundle/ruby/1.8/bin: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
到crontab文件,运行器任务正确执行。
但是每次进行部署时,我都需要手动编辑crontab文件以向其添加PATH语句。
是否有任何方法可以在crontab文件中添加此PATH行,以便在每次部署后都不需要手动执行此操作?
谢谢
我没有使用RVM并在文件config / schedule.rb中添加以下代码(每当gem相关代码时你写的地方)都适合我。
env :PATH, ENV['PATH']
我想如果你将/var/rails/myapp/shared/bundle/ruby/1.8/bin添加到服务器上运行的任何用户cron的PATH中,它应该被选中。 或者,您可以在schedule.rb中添加它:
env :PATH, "$PATH:/var/rails/myapp/shared/bundle/ruby/1.8/bin"
这应该是诀窍,但我还没有测试过。
来自idlefingers的答案看起来大致正确,但根据ami的评论,我会将该行更改为以下内容:
env :PATH, "#{ENV["PATH"]}:/var/rails/myapp/shared/bundle/ruby/1.8/bin"
请注意PATH的环境键的字符串插值。 我没有对此进行测试,但根据ami的注释,这应该按预期完全展开crontab文件中的路径字符串。
在启动的行之前,将PATH语句添加到crontab文件的顶部
# BEGIN Whenever generated tasks for:
并且您不必每次都手动编辑crontab文件