Ruby on Rails,Capistrano,每当:Cron作业没有在生产服务器上执行

时间:2014-09-09 23:44:32

标签: ruby-on-rails cron capistrano whenever whenever-capistrano

Ruby on rails + Capistrano + Whenever gem

我执行了whenever --update-crontab但仍然没有在生产服务器上执行cron作业。日志文件中没有日志。虽然一切都适用于不需要capistrano的开发。

schedule.rb

set :output, "../dev/log/cron.log"

every 1.minute do
  runner "SOME_TASK"
end

deploy.rb

set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }

capfile

 require "whenever/capistrano"

问题是什么?如何调试?

1 个答案:

答案 0 :(得分:0)

我在部署应用时遇到了类似的问题。

如果你检查crontab的日志文件,你会看到它确实执行但是它在错误的上下文中执行。

例如:

您认为此代码应该执行但不会:

every 1.minute do runner "bundle exec rake db:seed" end

相反,您应该提供可执行文件的绝对路径。 Cron不知道它应该在什么样的上下文中运行,它只是执行。

我们在部署中使用rbenv,并使用宝石垫片。所以我只为cron提供了可执行文件的绝对路径。

此代码运行: every 1.minute do runner "/usr/bin/shims/bundle exec rake db:seed" end