capistrano-sidekiq 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d0ff8554dbc131801c66a6d700486ce190d9737
4
- data.tar.gz: f2f644ba9ed6733ba9e071330373569eec5453e4
3
+ metadata.gz: b43a2e9a957a57fca9cddeb61fe2dab7f38d5d7f
4
+ data.tar.gz: bd9d98c7eef3166efa9c1043a06cd138029c3b9a
5
5
  SHA512:
6
- metadata.gz: c99d5cb368b2b529c2554ea3338db65f855232a0ee3c489db20b2c692ef908b4a48896aa60fd7447316e434611cd7a0526b1acb75b762ff7e86f4f51380a3042
7
- data.tar.gz: 422bf2b9727588094e6333b6b992d76ea4c4b77e0b533e237385e02c077d8e3be1f76ea75e93d9e9b8e7c745d24a74821daeab09df0fd82be37cc6c562ed421b
6
+ metadata.gz: 75ded52a6a43fbb98913af4efeaaf5f21ab52e3d6648f48600fda9bf875aa7ba803fc2312e502d3732aa1e5bff82a2210ec778d264603592e657e76860c86623
7
+ data.tar.gz: 1fdc6a4f79c26271f8a54d2b251b7da90215c97027e97a3ede44ca354c4263624cebca7873bf9cbbe09e85d8300e08d3ba6a79460257249f0599abac38a0e196
data/README.md CHANGED
@@ -47,6 +47,7 @@ Configurable options, shown here with defaults:
47
47
  :sidekiq_options_per_process => nil
48
48
  :sidekiq_concurrency => nil
49
49
  :sidekiq_monit_templates_path => 'config/deploy/templates'
50
+ :sidekiq_monit_use_sudo => true
50
51
  :sidekiq_cmd => "#{fetch(:bundle_cmd, "bundle")} exec sidekiq" # Only for capistrano2.5
51
52
  :sidekiqctl_cmd => "#{fetch(:bundle_cmd, "bundle")} exec sidekiqctl" # Only for capistrano2.5
52
53
  ```
@@ -69,6 +70,18 @@ and `low`:
69
70
  set :sidekiq_options_per_process, ["--queue high", "--queue default --queue low"]
70
71
  ```
71
72
 
73
+ ## Different number of processes per host
74
+
75
+ You can configure how many processes you want to run on each host next way:
76
+
77
+ ```ruby
78
+ set :sidekiq_role, [:sidekiq_small, :sidekiq_big]
79
+ set :sidekiq_small_processes, 1
80
+ set :sidekiq_big_processes, 4
81
+ server 'example-small.com', roles: [:sidekiq_small]
82
+ server 'example-big.com', roles: [:sidekiq_big]
83
+ ```
84
+
72
85
  ## Customizing the monit sidekiq templates
73
86
 
74
87
  If you need change some config in redactor, you can
@@ -78,7 +91,14 @@ If you need change some config in redactor, you can
78
91
 
79
92
  ```
80
93
 
94
+ If your deploy user has no need in `sudo` for using monit, you can disable it as follows:
95
+
96
+ ```ruby
97
+ set :sidekiq_monit_use_sudo, false
98
+ ```
99
+
81
100
  ## Changelog
101
+ - 0.5.3: Custom count of processes per each host
82
102
  - 0.5.0: Multiple processes @mrsimo
83
103
  - 0.3.9: Restore daemon flag from Monit template
84
104
  - 0.3.8:
@@ -108,6 +128,9 @@ If you need change some config in redactor, you can
108
128
  - [Fabien Penso] (https://github.com/penso)
109
129
  - [Alex Dunae] (https://github.com/alexdunae)
110
130
  - [andreygerasimchuk] (https://github.com/andreygerasimchuk)
131
+ - [Saicheg] (https://github.com/Saicheg)
132
+ - [Alex Yakubenko] (https://github.com/alexyakubenko)
133
+ - [Robert Strobl] (https://github.com/rstrobl)
111
134
 
112
135
  ## Contributing
113
136
 
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Sidekiq
3
- VERSION = '0.5.2'
3
+ VERSION = '0.5.3'
4
4
  end
5
5
  end
@@ -17,6 +17,7 @@ Capistrano::Configuration.instance.load do
17
17
 
18
18
  _cset(:sidekiq_timeout) { 10 }
19
19
  _cset(:sidekiq_role) { :app }
20
+
20
21
  _cset(:sidekiq_processes) { 1 }
21
22
  _cset(:sidekiq_options_per_process) { nil }
22
23
 
@@ -28,9 +29,10 @@ Capistrano::Configuration.instance.load do
28
29
  end
29
30
 
30
31
  namespace :sidekiq do
31
- def for_each_process(&block)
32
- fetch(:sidekiq_processes).times do |idx|
33
- if idx.zero? && fetch(:sidekiq_processes) <= 1
32
+ def for_each_process(sidekiq_role, &block)
33
+ sidekiq_processes = fetch(:"#{ sidekiq_role }_processes") rescue 1
34
+ sidekiq_processes.times do |idx|
35
+ if idx.zero? && sidekiq_processes <= 1
34
36
  pid_file = fetch(:sidekiq_pid)
35
37
  else
36
38
  pid_file = fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid")
@@ -39,15 +41,30 @@ Capistrano::Configuration.instance.load do
39
41
  end
40
42
  end
41
43
 
42
- def quiet_process(pid_file, idx)
43
- run "if [ -d #{current_path} ] && [ -f #{pid_file} ] && kill -0 `cat #{pid_file}`> /dev/null 2>&1; then cd #{current_path} && #{fetch(:sidekiqctl_cmd)} quiet #{pid_file} ; else echo 'Sidekiq is not running'; fi"
44
+ def for_each_role
45
+ sidekiq_roles = fetch(:sidekiq_role)
46
+
47
+ sidekiq_roles = if sidekiq_roles.respond_to?(:to_ary)
48
+ sidekiq_roles.to_ary
49
+ else
50
+ [sidekiq_roles]
51
+ end
52
+
53
+ sidekiq_roles.to_ary.each do |sidekiq_role|
54
+ puts "executing on ##{ sidekiq_role }" if sidekiq_roles.size > 1
55
+ yield(sidekiq_role)
56
+ end
57
+ end
58
+
59
+ def quiet_process(pid_file, idx, sidekiq_role)
60
+ run "if [ -d #{current_path} ] && [ -f #{pid_file} ] && kill -0 `cat #{pid_file}`> /dev/null 2>&1; then cd #{current_path} && #{fetch(:sidekiqctl_cmd)} quiet #{pid_file} ; else echo 'Sidekiq is not running'; fi", roles: sidekiq_role
44
61
  end
45
62
 
46
- def stop_process(pid_file, idx)
47
- run "if [ -d #{current_path} ] && [ -f #{pid_file} ] && kill -0 `cat #{pid_file}`> /dev/null 2>&1; then cd #{current_path} && #{fetch(:sidekiqctl_cmd)} stop #{pid_file} #{fetch :sidekiq_timeout} ; else echo 'Sidekiq is not running' && if [ -f #{pid_file} ] ; then rm #{pid_file} ; fi ; fi"
63
+ def stop_process(pid_file, idx, sidekiq_role)
64
+ run "if [ -d #{current_path} ] && [ -f #{pid_file} ] && kill -0 `cat #{pid_file}`> /dev/null 2>&1; then cd #{current_path} && #{fetch(:sidekiqctl_cmd)} stop #{pid_file} #{fetch :sidekiq_timeout} ; else echo 'Sidekiq is not running'; fi", roles: sidekiq_role
48
65
  end
49
66
 
50
- def start_process(pid_file, idx)
67
+ def start_process(pid_file, idx, sidekiq_role)
51
68
  args = []
52
69
  args.push "--index #{idx}"
53
70
  args.push "--pidfile #{pid_file}"
@@ -73,35 +90,43 @@ Capistrano::Configuration.instance.load do
73
90
  args.push '--daemon'
74
91
  end
75
92
 
76
- run "if [ -d #{current_path} ] && [ ! -f #{pid_file} ] || ! kill -0 `cat #{pid_file}` > /dev/null 2>&1; then cd #{current_path} ; #{fetch(:sidekiq_cmd)} #{args.compact.join(' ')} ; else echo 'Sidekiq is already running'; fi", pty: false
93
+ run "if [ -d #{current_path} ] && [ ! -f #{pid_file} ] || ! kill -0 `cat #{pid_file}` > /dev/null 2>&1; then cd #{current_path} ; #{fetch(:sidekiq_cmd)} #{args.compact.join(' ')} ; else echo 'Sidekiq is already running'; fi", pty: false, roles: sidekiq_role
77
94
  end
78
95
 
79
96
  desc 'Quiet sidekiq (stop accepting new work)'
80
97
  task :quiet, roles: lambda { fetch(:sidekiq_role) }, on_no_matching_servers: :continue do
81
- for_each_process do |pid_file, idx|
82
- quiet_process(pid_file, idx)
98
+ for_each_role do |sidekiq_role|
99
+ for_each_process(sidekiq_role) do |pid_file, idx|
100
+ quiet_process(pid_file, idx, sidekiq_role)
101
+ end
83
102
  end
84
103
  end
85
104
 
86
105
  desc 'Stop sidekiq'
87
106
  task :stop, roles: lambda { fetch(:sidekiq_role) }, on_no_matching_servers: :continue do
88
- for_each_process do |pid_file, idx|
89
- stop_process(pid_file, idx)
107
+ for_each_role do |sidekiq_role|
108
+ for_each_process(sidekiq_role) do |pid_file, idx|
109
+ stop_process(pid_file, idx, sidekiq_role)
110
+ end
90
111
  end
91
112
  end
92
113
 
93
114
  desc 'Start sidekiq'
94
115
  task :start, roles: lambda { fetch(:sidekiq_role) }, on_no_matching_servers: :continue do
95
- for_each_process do |pid_file, idx|
96
- start_process(pid_file, idx)
116
+ for_each_role do |sidekiq_role|
117
+ for_each_process(sidekiq_role) do |pid_file, idx|
118
+ start_process(pid_file, idx, sidekiq_role)
119
+ end
97
120
  end
98
121
  end
99
122
 
100
123
  desc 'Rolling-restart sidekiq'
101
124
  task :rolling_restart, roles: lambda { fetch(:sidekiq_role) }, on_no_matching_servers: :continue do
102
- for_each_process do |pid_file, idx|
103
- stop_process(pid_file, idx)
104
- start_process(pid_file, idx)
125
+ for_each_role do |sidekiq_role|
126
+ for_each_process(sidekiq_role) do |pid_file, idx|
127
+ stop_process(pid_file, idx, sidekiq_role)
128
+ start_process(pid_file, idx, sidekiq_role)
129
+ end
105
130
  end
106
131
  end
107
132
 
@@ -1,6 +1,7 @@
1
1
  namespace :load do
2
2
  task :defaults do
3
3
  set :sidekiq_monit_conf_dir, -> { '/etc/monit/conf.d' }
4
+ set :sidekiq_monit_use_sudo, -> { true }
4
5
  set :monit_bin, -> { '/usr/bin/monit' }
5
6
  set :sidekiq_monit_default_hooks, -> { true }
6
7
  end
@@ -26,18 +27,12 @@ namespace :sidekiq do
26
27
  task :config do
27
28
  on roles(fetch(:sidekiq_role)) do |role|
28
29
  @role = role
29
- template_sidekiq 'sidekiq_monit', "#{fetch(:tmp_dir)}/monit.conf", @role
30
+ upload_sidekiq_template 'sidekiq_monit', "#{fetch(:tmp_dir)}/monit.conf", @role
30
31
 
31
32
  mv_command = "mv #{fetch(:tmp_dir)}/monit.conf #{fetch(:sidekiq_monit_conf_dir)}/#{sidekiq_service_name}.conf"
33
+ sudo_if_needed mv_command
32
34
 
33
- # Try execute in case the deploy user doesn't have sudo to mv
34
- begin
35
- execute mv_command
36
- rescue
37
- sudo mv_command
38
- end
39
-
40
- sudo "#{fetch(:monit_bin)} reload"
35
+ sudo_if_needed "#{fetch(:monit_bin)} reload"
41
36
  end
42
37
  end
43
38
 
@@ -46,10 +41,10 @@ namespace :sidekiq do
46
41
  on roles(fetch(:sidekiq_role)) do
47
42
  fetch(:sidekiq_processes).times do |idx|
48
43
  begin
49
- sudo "#{fetch(:monit_bin)} monitor #{sidekiq_service_name(idx)}"
44
+ sudo_if_needed "#{fetch(:monit_bin)} monitor #{sidekiq_service_name(idx)}"
50
45
  rescue
51
46
  invoke 'sidekiq:monit:config'
52
- sudo "#{fetch(:monit_bin)} monitor #{sidekiq_service_name(idx)}"
47
+ sudo_if_needed "#{fetch(:monit_bin)} monitor #{sidekiq_service_name(idx)}"
53
48
  end
54
49
  end
55
50
  end
@@ -60,7 +55,7 @@ namespace :sidekiq do
60
55
  on roles(fetch(:sidekiq_role)) do
61
56
  fetch(:sidekiq_processes).times do |idx|
62
57
  begin
63
- sudo "#{fetch(:monit_bin)} unmonitor #{sidekiq_service_name(idx)}"
58
+ sudo_if_needed "#{fetch(:monit_bin)} unmonitor #{sidekiq_service_name(idx)}"
64
59
  rescue
65
60
  # no worries here
66
61
  end
@@ -72,7 +67,7 @@ namespace :sidekiq do
72
67
  task :start do
73
68
  on roles(fetch(:sidekiq_role)) do
74
69
  fetch(:sidekiq_processes).times do |idx|
75
- sudo "#{fetch(:monit_bin)} start #{sidekiq_service_name(idx)}"
70
+ sudo_if_needed "#{fetch(:monit_bin)} start #{sidekiq_service_name(idx)}"
76
71
  end
77
72
  end
78
73
  end
@@ -81,7 +76,7 @@ namespace :sidekiq do
81
76
  task :stop do
82
77
  on roles(fetch(:sidekiq_role)) do
83
78
  fetch(:sidekiq_processes).times do |idx|
84
- sudo "#{fetch(:monit_bin)} stop #{sidekiq_service_name(idx)}"
79
+ sudo_if_needed "#{fetch(:monit_bin)} stop #{sidekiq_service_name(idx)}"
85
80
  end
86
81
  end
87
82
  end
@@ -90,7 +85,7 @@ namespace :sidekiq do
90
85
  task :restart do
91
86
  on roles(fetch(:sidekiq_role)) do
92
87
  fetch(:sidekiq_processes).times do |idx|
93
- sudo "#{fetch(:monit_bin)} restart #{sidekiq_service_name(idx)}"
88
+ sudo_if_needed"#{fetch(:monit_bin)} restart #{sidekiq_service_name(idx)}"
94
89
  end
95
90
  end
96
91
  end
@@ -123,5 +118,13 @@ namespace :sidekiq do
123
118
  end
124
119
  end
125
120
 
121
+ def sudo_if_needed(command)
122
+ send(use_sudo? ? :sudo : :execute, command)
123
+ end
124
+
125
+ def use_sudo?
126
+ fetch(:sidekiq_monit_use_sudo)
127
+ end
128
+
126
129
  end
127
130
  end
@@ -17,7 +17,6 @@ namespace :load do
17
17
  end
18
18
  end
19
19
 
20
-
21
20
  namespace :deploy do
22
21
  before :starting, :check_sidekiq_hooks do
23
22
  invoke 'sidekiq:add_default_hooks' if fetch(:sidekiq_default_hooks)
@@ -40,12 +39,17 @@ namespace :sidekiq do
40
39
 
41
40
  def processes_pids
42
41
  pids = []
43
- fetch(:sidekiq_processes).times do |idx|
44
- pids.push (idx.zero? && fetch(:sidekiq_processes) <= 1) ?
45
- fetch(:sidekiq_pid) :
46
- fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid")
47
-
42
+ sidekiq_roles = Array(fetch(:sidekiq_role))
43
+ sidekiq_roles.each do |role|
44
+ next unless host.roles.include?(role)
45
+ processes = fetch(:"#{ role }_processes") || fetch(:sidekiq_processes)
46
+ processes.times do |idx|
47
+ pids.push (idx.zero? && processes <= 1) ?
48
+ fetch(:sidekiq_pid) :
49
+ fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid")
50
+ end
48
51
  end
52
+
49
53
  pids
50
54
  end
51
55
 
@@ -199,25 +203,29 @@ namespace :sidekiq do
199
203
  end
200
204
  end
201
205
 
202
- def template_sidekiq(from, to, role)
203
- [
204
- "#{fetch(:sidekiq_monit_templates_path)}/#{from}.erb",
205
- File.join('lib', 'capistrano', 'templates', "#{from}-#{role.hostname}-#{fetch(:stage)}.conf.rb"),
206
- File.join('lib', 'capistrano', 'templates', "#{from}-#{role.hostname}-#{fetch(:stage)}.conf.rb"),
207
- File.join('lib', 'capistrano', 'templates', "#{from}-#{role.hostname}.conf.rb"),
208
- File.join('lib', 'capistrano', 'templates', "#{from}-#{fetch(:stage)}.conf.rb"),
209
- File.join('lib', 'capistrano', 'templates', "#{from}.conf.rb.erb"),
210
- File.join('lib', 'capistrano', 'templates', "#{from}.conf.rb"),
211
- File.join('lib', 'capistrano', 'templates', "#{from}.conf.erb"),
212
- File.expand_path("../../../generators/capistrano/sidekiq/monit/templates/#{from}.conf.rb.erb", __FILE__),
213
- File.expand_path("../../../generators/capistrano/sidekiq/monit/templates/#{from}.conf.erb", __FILE__)
214
- ].each do |path|
215
- if File.file?(path)
216
- erb = File.read(path)
217
- upload! StringIO.new(ERB.new(erb).result(binding)), to
218
- break
219
- end
220
- end
206
+ def upload_sidekiq_template(from, to, role)
207
+ template = sidekiq_template(from, role)
208
+ upload!(StringIO.new(ERB.new(template).result(binding)), to)
221
209
  end
222
210
 
211
+ def sidekiq_template(name, role)
212
+ local_template_directory = fetch(:sidekiq_monit_templates_path)
213
+
214
+ search_paths = [
215
+ "#{name}-#{role.hostname}-#{fetch(:stage)}.erb",
216
+ "#{name}-#{role.hostname}.erb",
217
+ "#{name}-#{fetch(:stage)}.erb",
218
+ "#{name}.erb"
219
+ ].map { |filename| File.join(local_template_directory, filename) }
220
+
221
+ global_search_path = File.expand_path(
222
+ File.join(*%w[.. .. .. generators capistrano sidekiq monit templates], "#{name}.conf.erb"),
223
+ __FILE__
224
+ )
225
+
226
+ search_paths << global_search_path
227
+
228
+ template_path = search_paths.detect { |path| File.file?(path) }
229
+ File.read(template_path)
230
+ end
223
231
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abdelkader Boudih
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-20 00:00:00.000000000 Z
11
+ date: 2015-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano