3

我正在使用带有rails 3 的 gem。在我的生产服务器 (ubuntu) 上,运行器任务不运行。我尝试按照此 github ticket:set job_template中的说明设置to get 。然而,这并不能解决问题。-l -i

这个特定的生产 ubuntu 的问题是 ruby​​ 路径不在echo $PATH

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

而红宝石路径是 /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 行,以便在每次部署后无需手动执行此操作?

谢谢

4

4 回答 4

3

我没有使用 RVM 并在文件 config/schedule.rb 中添加以下代码(每当 gem 相关代码时你写的地方)对我有用。

env :PATH, ENV['PATH']
于 2013-04-15T09:15:20.277 回答
1

我认为,如果您将 /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"

应该可以解决问题,但我还没有测试过。

于 2011-04-18T08:41:08.020 回答
1

idlefingers 的答案看起来大部分是正确的,但根据 ami 的评论,我会将该行更改为以下内容:

env :PATH, "#{ENV["PATH"]}:/var/rails/myapp/shared/bundle/ruby/1.8/bin"

请注意 PATH 环境键的字符串插值。我没有对此进行测试,但根据 ami 的评论,这应该会按预期完全扩展 crontab 文件中的路径字符串。

于 2011-12-04T19:55:59.223 回答
0

将 PATH 语句添加到 crontab 文件的顶部,在开始的行之前

# BEGIN Whenever generated tasks for:

而且您不必每次都手动编辑您的 crontab 文件

于 2011-07-02T23:19:12.007 回答