Read more

Whenever: Don't forget leading zeros for hours!

Deleted user #4117
June 08, 2018Software engineer

Whenever is a Ruby gem that provides a nicer syntax for writing and deploying cron jobs.

Illustration book lover

Growing Rails Applications in Practice

Check out our e-book. Learn to structure large Ruby on Rails codebases with the tools you already know and love.

  • Introduce design conventions for controllers and user-facing models
  • Create a system for growth
  • Build applications to last
Read more Show archive.org snapshot

Leading zeros are important for whenever if you use the 24-hours format!

This schedule.rb:

every 1.day, at: '3:00', roles: [:primary_cron] do
  runner 'Scheduler.delay.do_things'
end

will lead to this crontab entry (crontab -l) with the default configuration:

0 15 * * * /bin/bash -l -c 'cd /var/www/my-project/releases/20180607182518 && bin/rails runner -e production '\''Scheduler.delay.do_things'\'''

Which would run on 3pm instead of 3am.

Using the leading zero will lead to the expected behaviour:

schedule.rb

every 1.day, at: '03:00', roles: [:primary_cron] do
  runner 'Scheduler.delay.do_things'
end

crontab -l:

0 3 * * * /bin/bash -l -c 'cd /var/www/my-project/releases/20180608095252 && bin/rails runner -e staging '\''Scheduler.delay.do_things'\'''

The reason for the described behavior is that the underlying datetime parsing gem "chronic" defaults to a 12 hour clock Show archive.org snapshot . You could configure it to a 24 hour clock Show archive.org snapshot to stop worrying about leading zeros:

set :chronic_options, hours24: true

Another interesting chronic option is "week_start", which defaults to :sunday.

Posted to makandra dev (2018-06-08 12:01)