-
Notifications
You must be signed in to change notification settings - Fork 726
/
whenever.rake
56 lines (50 loc) · 1.82 KB
/
whenever.rake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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