Multiserver Whenever¶ ↑
Created by Chris Powers 12/7/2010
Provides the multiserver_whenever command for generating host-specific crontabs with role-based whenever files. This is very handy for when you need to deploy different crontabs to different staging/production servers, but still want to leverage the whenever gem’s DSL and build tools.
Learn all about the original whenever gem at github.com/javan/whenever.
Installation¶ ↑
Just install the multiserver_whenever gem per usual:
gem install multiserver_whenever
Generating Document Structure with MultiserverWheneverize¶ ↑
Taking off of the whenever gem’s wheneverize, this gem provides the multiserver_wheneverize command to generate the initial file structure:
cd /path/to/your_app multiserver_wheneverize
The generated file structure looks like:
- your_app/ - config/ - whenever.yml - whenever/ - do_not_remove.rb - example.rb
Configuration¶ ↑
The config/whenever.yml file is a hash where the keys are server hostnames and the values are arrays of “roles”.
Let’s say that I have two servers with hostnames app_server and db_server. I need to set app-related crontabs on app_server, db-related crontabs on db_server and some shared crontabs on both. To do this, I will first create three whenever files in config/whenever:
- your_app/ - config/ - whenever.yml - whenever/ - app.rb - db.rb - do_not_remove.rb - shared.rb
The contents of each of these files is regular whenever code (see github.com/javan/whenever).
Then in our config/whenever.yml file we map our hostnames to the cron roles:
--- app_server: - app - shared db_server: - db - shared
Now when you run the multiserver_whenever command on one of your servers, it will only apply the whenever files that are specified in your config/whenever.yml file.
Running multiserver_whenever¶ ↑
If you are using the whenever rake and runner commands, you may need to specify a Rails environment. It defaults to using production, but you can simply pass a different environment to the multiserver_whenever command instead:
multiserver_whenever staging
Deployment with Capistrano¶ ↑
In your Capistrano deployment code, you should be able to add something like this to run multiserver_whenever on deployment:
namespace :whenever do desc "Update your whenever-generated crontabs" task :update do run "cd #{release_path}; multiserver_whenever #{rails_env}" end after "deploy:update", "whenever:update" end