每当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文件