Repository is archived
No commit activity in last 3 years
No release in over 3 years
Provides the multiserver_whenever command for generating host-specific crontabs with role-based whenever files.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 0.6.2
 Project Readme

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