namespace :whenever do
def setup_whenever_task(*args, &block) args = Array(fetch(:whenever_command)) + args on roles fetch(:whenever_roles) do |host| args_for_host = block_given? ? args + Array(yield(host)) : args within fetch(:whenever_path) do with fetch(:whenever_command_environment_variables) do execute(*args_for_host) end end end end def load_file file = fetch(:whenever_load_file) if file "-f #{file}" else '' end end desc "Update application's crontab entries using Whenever" task :update_crontab do setup_whenever_task do |host| roles = host.roles_array.join(",") [fetch(:whenever_update_flags), "--roles=#{roles}", load_file] end end desc "Clear application's crontab entries using Whenever" task :clear_crontab do setup_whenever_task do |host| [fetch(:whenever_clear_flags), load_file] end end after "deploy:updated", "whenever:update_crontab" after "deploy:reverted", "whenever:update_crontab"
end
namespace :load do
task :defaults do set :whenever_roles, ->{ :db } set :whenever_command, ->{ [:bundle, :exec, :whenever] } set :whenever_command_environment_variables, ->{ fetch(:default_env).merge(rails_env: fetch(:whenever_environment)) } set :whenever_identifier, ->{ fetch :application } set :whenever_environment, ->{ fetch :rails_env, fetch(:stage, "production") } set :whenever_variables, ->{ "environment=#{fetch :whenever_environment}" } set :whenever_load_file, ->{ nil } set :whenever_update_flags, ->{ "--update-crontab #{fetch :whenever_identifier} --set #{fetch :whenever_variables}" } set :whenever_clear_flags, ->{ "--clear-crontab #{fetch :whenever_identifier}" } set :whenever_path, ->{ release_path } end
end