capistrano-sidekiq 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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