Ruby on Rails, Capistrano, Whenever: Cron jobs not getting executed at production server

580 Views Asked by At

Ruby on rails + Capistrano + Whenever gem

I executed whenever --update-crontab but still cron job is not getting executed at production server. There are no logs in the log file. Though everything works well at development where capistrano is not required.

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"

What's the issue? How to debug?

1

There are 1 best solutions below

0
On

I've had similar issues when deploying our apps.

If you check the log files of crontab you'll see that it does execute but its being executed in the wrong context.

For example:

You think this code should execute but it doesn't:

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

Instead you should supply the absolute path tot the executable. Cron doesn't know in what kind of context it should be run, it just executes.

We use rbenv in our deployment and we use shims of gems. So I just supplied cron with the absolute path to the executable.

This code does run: every 1.minute do runner "/usr/bin/shims/bundle exec rake db:seed" end