capistrano-sidekiq 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTORS.md +11 -0
- data/README.md +3 -11
- data/capistrano-sidekiq.gemspec +1 -1
- data/lib/capistrano/sidekiq.rb +1 -1
- data/lib/capistrano/sidekiq/monit.rb +1 -1
- data/lib/capistrano/sidekiq/version.rb +1 -1
- data/lib/capistrano/tasks/capistrano2.rb +15 -8
- data/lib/capistrano/tasks/{monit.cap → monit.rake} +9 -4
- data/lib/capistrano/tasks/{sidekiq.cap → sidekiq.rake} +54 -31
- data/lib/generators/capistrano/sidekiq/monit/templates/sidekiq_monit.conf.erb +2 -2
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32f341ab53e9dfdb15b39d595948a85f9004460e
|
4
|
+
data.tar.gz: f5ff8d829bc7ae25c517605b61805ba6a79c9abe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02dd736baaa98223d535075aa3b7ccbb8cbad793b1c309e4206d7b11dfd08ad70d72268ed43b520c5b903612d52463d6b8c543b25f16aca9a09a17e68afaf6bf
|
7
|
+
data.tar.gz: e861c2ff9c05b484e4b2c5111bee3b944dfa203d1cdb7b0a4d96c5c34c97a0406fb8d58ebd490bc59d79dddb618cdc7cae53bf9d3d6e7f9e68275310e37e8c65
|
data/CONTRIBUTORS.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
## Contributors
|
2
|
+
|
3
|
+
- [Jérémy Lecour] (https://github.com/jlecour)
|
4
|
+
- [Fabien Penso] (https://github.com/penso)
|
5
|
+
- [Alex Dunae] (https://github.com/alexdunae)
|
6
|
+
- [andreygerasimchuk] (https://github.com/andreygerasimchuk)
|
7
|
+
- [Saicheg] (https://github.com/Saicheg)
|
8
|
+
- [Alex Yakubenko] (https://github.com/alexyakubenko)
|
9
|
+
- [Robert Strobl] (https://github.com/rstrobl)
|
10
|
+
- [Eurico Doirado] (https://github.com/okoriko)
|
11
|
+
- [Huang Bin](https://github.com/hbin)
|
data/README.md
CHANGED
@@ -50,9 +50,10 @@ Configurable options, shown here with defaults:
|
|
50
50
|
:sidekiq_monit_use_sudo => true
|
51
51
|
:sidekiq_cmd => "#{fetch(:bundle_cmd, "bundle")} exec sidekiq" # Only for capistrano2.5
|
52
52
|
:sidekiqctl_cmd => "#{fetch(:bundle_cmd, "bundle")} exec sidekiqctl" # Only for capistrano2.5
|
53
|
+
:sidekiq_user => nil #user to run sidekiq as
|
53
54
|
```
|
54
55
|
|
55
|
-
There is a known bug that prevents sidekiq from starting when pty is true
|
56
|
+
There is a known bug that prevents sidekiq from starting when pty is true on Capistrano 3.
|
56
57
|
```ruby
|
57
58
|
set :pty, false
|
58
59
|
```
|
@@ -98,6 +99,7 @@ set :sidekiq_monit_use_sudo, false
|
|
98
99
|
```
|
99
100
|
|
100
101
|
## Changelog
|
102
|
+
- 0.5.4: Add support for custom count of processes per host in monit task @okoriko
|
101
103
|
- 0.5.3: Custom count of processes per each host
|
102
104
|
- 0.5.0: Multiple processes @mrsimo
|
103
105
|
- 0.3.9: Restore daemon flag from Monit template
|
@@ -122,16 +124,6 @@ set :sidekiq_monit_use_sudo, false
|
|
122
124
|
- 0.2.3: Added monit tasks (alpha)
|
123
125
|
- 0.2.0: Added sidekiq:rolling_restart - @jlecour
|
124
126
|
|
125
|
-
## Contributors
|
126
|
-
|
127
|
-
- [Jérémy Lecour] (https://github.com/jlecour)
|
128
|
-
- [Fabien Penso] (https://github.com/penso)
|
129
|
-
- [Alex Dunae] (https://github.com/alexdunae)
|
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)
|
134
|
-
|
135
127
|
## Contributing
|
136
128
|
|
137
129
|
1. Fork it
|
data/capistrano-sidekiq.gemspec
CHANGED
data/lib/capistrano/sidekiq.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# load monit tasks
|
2
|
-
load File.expand_path('../../tasks/monit.
|
2
|
+
load File.expand_path('../../tasks/monit.rake', __FILE__)
|
@@ -21,6 +21,8 @@ Capistrano::Configuration.instance.load do
|
|
21
21
|
_cset(:sidekiq_processes) { 1 }
|
22
22
|
_cset(:sidekiq_options_per_process) { nil }
|
23
23
|
|
24
|
+
_cset(:sidekiq_user) { nil }
|
25
|
+
|
24
26
|
if fetch(:sidekiq_default_hooks)
|
25
27
|
before 'deploy:update_code', 'sidekiq:quiet'
|
26
28
|
after 'deploy:stop', 'sidekiq:stop'
|
@@ -32,11 +34,7 @@ Capistrano::Configuration.instance.load do
|
|
32
34
|
def for_each_process(sidekiq_role, &block)
|
33
35
|
sidekiq_processes = fetch(:"#{ sidekiq_role }_processes") rescue 1
|
34
36
|
sidekiq_processes.times do |idx|
|
35
|
-
|
36
|
-
pid_file = fetch(:sidekiq_pid)
|
37
|
-
else
|
38
|
-
pid_file = fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid")
|
39
|
-
end
|
37
|
+
pid_file = fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid")
|
40
38
|
yield(pid_file, idx)
|
41
39
|
end
|
42
40
|
end
|
@@ -56,12 +54,21 @@ Capistrano::Configuration.instance.load do
|
|
56
54
|
end
|
57
55
|
end
|
58
56
|
|
57
|
+
def run_as(cmd)
|
58
|
+
opts = {
|
59
|
+
roles: sidekiq_role
|
60
|
+
}
|
61
|
+
su_user = fetch(:sidekiq_user)
|
62
|
+
opts[:shell] = "su - #{su_user}" if su_user
|
63
|
+
run cmd, opts
|
64
|
+
end
|
65
|
+
|
59
66
|
def quiet_process(pid_file, idx, sidekiq_role)
|
60
|
-
|
67
|
+
run_as "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"
|
61
68
|
end
|
62
69
|
|
63
70
|
def stop_process(pid_file, idx, sidekiq_role)
|
64
|
-
|
71
|
+
run_as "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"
|
65
72
|
end
|
66
73
|
|
67
74
|
def start_process(pid_file, idx, sidekiq_role)
|
@@ -90,7 +97,7 @@ Capistrano::Configuration.instance.load do
|
|
90
97
|
args.push '--daemon'
|
91
98
|
end
|
92
99
|
|
93
|
-
|
100
|
+
run_as "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"
|
94
101
|
end
|
95
102
|
|
96
103
|
desc 'Quiet sidekiq (stop accepting new work)'
|
@@ -1,9 +1,10 @@
|
|
1
1
|
namespace :load do
|
2
2
|
task :defaults do
|
3
|
-
set :sidekiq_monit_conf_dir,
|
4
|
-
set :sidekiq_monit_use_sudo,
|
5
|
-
set :monit_bin,
|
6
|
-
set :sidekiq_monit_default_hooks,
|
3
|
+
set :sidekiq_monit_conf_dir, '/etc/monit/conf.d'
|
4
|
+
set :sidekiq_monit_use_sudo, true
|
5
|
+
set :monit_bin, '/usr/bin/monit'
|
6
|
+
set :sidekiq_monit_default_hooks, true
|
7
|
+
set :sidekiq_monit_templates_path, 'config/deploy/templates'
|
7
8
|
end
|
8
9
|
end
|
9
10
|
|
@@ -118,6 +119,10 @@ namespace :sidekiq do
|
|
118
119
|
end
|
119
120
|
end
|
120
121
|
|
122
|
+
def sidekiq_options_per_process
|
123
|
+
fetch(:sidekiq_options_per_process) || []
|
124
|
+
end
|
125
|
+
|
121
126
|
def sudo_if_needed(command)
|
122
127
|
send(use_sudo? ? :sudo : :execute, command)
|
123
128
|
end
|
@@ -9,11 +9,13 @@ namespace :load do
|
|
9
9
|
set :sidekiq_role, -> { :app }
|
10
10
|
set :sidekiq_processes, -> { 1 }
|
11
11
|
set :sidekiq_options_per_process, -> { nil }
|
12
|
-
|
12
|
+
set :sidekiq_user, -> { nil }
|
13
|
+
# Rbenv, Chruby, and RVM integration
|
13
14
|
set :rbenv_map_bins, fetch(:rbenv_map_bins).to_a.concat(%w(sidekiq sidekiqctl))
|
14
15
|
set :rvm_map_bins, fetch(:rvm_map_bins).to_a.concat(%w(sidekiq sidekiqctl))
|
15
|
-
|
16
|
-
|
16
|
+
set :chruby_map_bins, fetch(:chruby_map_bins).to_a.concat(%w{ sidekiq sidekiqctl })
|
17
|
+
# Bundler integration
|
18
|
+
set :bundle_bins, fetch(:bundle_bins).to_a.concat(%w(sidekiq sidekiqctl))
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
@@ -44,9 +46,7 @@ namespace :sidekiq do
|
|
44
46
|
next unless host.roles.include?(role)
|
45
47
|
processes = fetch(:"#{ role }_processes") || fetch(:sidekiq_processes)
|
46
48
|
processes.times do |idx|
|
47
|
-
pids.push (idx.
|
48
|
-
fetch(:sidekiq_pid) :
|
49
|
-
fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid")
|
49
|
+
pids.push fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid")
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -66,10 +66,10 @@ namespace :sidekiq do
|
|
66
66
|
if fetch(:sidekiq_use_signals)
|
67
67
|
background "kill -TERM `cat #{pid_file}`"
|
68
68
|
else
|
69
|
-
background :
|
69
|
+
background :sidekiqctl, 'stop', "#{pid_file}", fetch(:sidekiq_timeout)
|
70
70
|
end
|
71
71
|
else
|
72
|
-
execute :
|
72
|
+
execute :sidekiqctl, 'stop', "#{pid_file}", fetch(:sidekiq_timeout)
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
@@ -78,7 +78,7 @@ namespace :sidekiq do
|
|
78
78
|
background "kill -USR1 `cat #{pid_file}`"
|
79
79
|
else
|
80
80
|
begin
|
81
|
-
execute :
|
81
|
+
execute :sidekiqctl, 'quiet', "#{pid_file}"
|
82
82
|
rescue SSHKit::Command::Failed
|
83
83
|
# If gems are not installed eq(first deploy) and sidekiq_default_hooks as active
|
84
84
|
warn 'sidekiqctl not found (ignore if this is the first deploy)'
|
@@ -113,9 +113,9 @@ namespace :sidekiq do
|
|
113
113
|
end
|
114
114
|
|
115
115
|
if fetch(:start_sidekiq_in_background, fetch(:sidekiq_run_in_background))
|
116
|
-
background :
|
116
|
+
background :sidekiq, args.compact.join(' ')
|
117
117
|
else
|
118
|
-
execute :
|
118
|
+
execute :sidekiq, args.compact.join(' ')
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
@@ -129,10 +129,12 @@ namespace :sidekiq do
|
|
129
129
|
desc 'Quiet sidekiq (stop processing new tasks)'
|
130
130
|
task :quiet do
|
131
131
|
on roles fetch(:sidekiq_role) do
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
132
|
+
switch_user do
|
133
|
+
if test("[ -d #{release_path} ]") # fixes #11
|
134
|
+
for_each_process(true) do |pid_file, idx|
|
135
|
+
if pid_process_exists?(pid_file)
|
136
|
+
quiet_sidekiq(pid_file)
|
137
|
+
end
|
136
138
|
end
|
137
139
|
end
|
138
140
|
end
|
@@ -142,10 +144,12 @@ namespace :sidekiq do
|
|
142
144
|
desc 'Stop sidekiq'
|
143
145
|
task :stop do
|
144
146
|
on roles fetch(:sidekiq_role) do
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
147
|
+
switch_user do
|
148
|
+
if test("[ -d #{release_path} ]")
|
149
|
+
for_each_process(true) do |pid_file, idx|
|
150
|
+
if pid_process_exists?(pid_file)
|
151
|
+
stop_sidekiq(pid_file)
|
152
|
+
end
|
149
153
|
end
|
150
154
|
end
|
151
155
|
end
|
@@ -155,8 +159,10 @@ namespace :sidekiq do
|
|
155
159
|
desc 'Start sidekiq'
|
156
160
|
task :start do
|
157
161
|
on roles fetch(:sidekiq_role) do
|
158
|
-
|
159
|
-
|
162
|
+
switch_user do
|
163
|
+
for_each_process do |pid_file, idx|
|
164
|
+
start_sidekiq(pid_file, idx) unless pid_process_exists?(pid_file)
|
165
|
+
end
|
160
166
|
end
|
161
167
|
end
|
162
168
|
end
|
@@ -170,11 +176,13 @@ namespace :sidekiq do
|
|
170
176
|
desc 'Rolling-restart sidekiq'
|
171
177
|
task :rolling_restart do
|
172
178
|
on roles fetch(:sidekiq_role) do
|
173
|
-
|
174
|
-
|
175
|
-
|
179
|
+
switch_user do
|
180
|
+
for_each_process(true) do |pid_file, idx|
|
181
|
+
if pid_process_exists?(pid_file)
|
182
|
+
stop_sidekiq(pid_file)
|
183
|
+
end
|
184
|
+
start_sidekiq(pid_file, idx)
|
176
185
|
end
|
177
|
-
start_sidekiq(pid_file, idx)
|
178
186
|
end
|
179
187
|
end
|
180
188
|
end
|
@@ -182,9 +190,11 @@ namespace :sidekiq do
|
|
182
190
|
# Delete any pid file not in use
|
183
191
|
task :cleanup do
|
184
192
|
on roles fetch(:sidekiq_role) do
|
185
|
-
|
186
|
-
|
187
|
-
|
193
|
+
switch_user do
|
194
|
+
for_each_process do |pid_file, idx|
|
195
|
+
if pid_file_exists?(pid_file)
|
196
|
+
execute "rm #{pid_file}" unless pid_process_exists?(pid_file)
|
197
|
+
end
|
188
198
|
end
|
189
199
|
end
|
190
200
|
end
|
@@ -195,14 +205,27 @@ namespace :sidekiq do
|
|
195
205
|
task :respawn do
|
196
206
|
invoke 'sidekiq:cleanup'
|
197
207
|
on roles fetch(:sidekiq_role) do
|
198
|
-
|
199
|
-
|
200
|
-
|
208
|
+
switch_user do
|
209
|
+
for_each_process do |pid_file, idx|
|
210
|
+
unless pid_file_exists?(pid_file)
|
211
|
+
start_sidekiq(pid_file, idx)
|
212
|
+
end
|
201
213
|
end
|
202
214
|
end
|
203
215
|
end
|
204
216
|
end
|
205
217
|
|
218
|
+
def switch_user(&block)
|
219
|
+
su_user = fetch(:sidekiq_user)
|
220
|
+
if su_user
|
221
|
+
as su_user do
|
222
|
+
yield
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
yield
|
227
|
+
end
|
228
|
+
|
206
229
|
def upload_sidekiq_template(from, to, role)
|
207
230
|
template = sidekiq_template(from, role)
|
208
231
|
upload!(StringIO.new(ERB.new(template).result(binding)), to)
|
@@ -2,9 +2,9 @@
|
|
2
2
|
<% processes_pids.each_with_index do |pid_file, idx| %>
|
3
3
|
check process <%= sidekiq_service_name(idx) %>
|
4
4
|
with pidfile "<%= pid_file %>"
|
5
|
-
start program = "/bin/su - <%= @role.user %> -c 'cd <%= current_path %> && <%= SSHKit.config.command_map[:
|
5
|
+
start program = "/bin/su - <%= @role.user %> -c 'cd <%= current_path %> && <%= SSHKit.config.command_map[:sidekiq] %> <%= sidekiq_config %> --index <%= idx %> --pidfile <%= pid_file %> --environment <%= fetch(:sidekiq_env) %> <%= sidekiq_concurrency %> <%= sidekiq_logfile %> <%= sidekiq_queues %> <%= sidekiq_options_per_process[idx] %> -d'" with timeout 30 seconds
|
6
6
|
|
7
|
-
stop program = "/bin/su - <%= @role.user %> -c 'cd <%= current_path %> && <%= SSHKit.config.command_map[:
|
7
|
+
stop program = "/bin/su - <%= @role.user %> -c 'cd <%= current_path %> && <%= SSHKit.config.command_map[:sidekiqctl] %> stop <%= pid_file %>'" with timeout <%= fetch(:sidekiq_timeout).to_i + 10 %> seconds
|
8
8
|
group <%= fetch(:sidekiq_monit_group, fetch(:application)) %>-sidekiq
|
9
9
|
|
10
10
|
<% 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.
|
4
|
+
version: 0.5.4
|
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-
|
11
|
+
date: 2015-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3.4'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3.4'
|
41
41
|
description: Sidekiq integration for Capistrano
|
42
42
|
email:
|
43
43
|
- terminale@gmail.com
|
@@ -46,6 +46,7 @@ extensions: []
|
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
48
|
- ".gitignore"
|
49
|
+
- CONTRIBUTORS.md
|
49
50
|
- Gemfile
|
50
51
|
- LICENSE.txt
|
51
52
|
- README.md
|
@@ -56,8 +57,8 @@ files:
|
|
56
57
|
- lib/capistrano/sidekiq/monit.rb
|
57
58
|
- lib/capistrano/sidekiq/version.rb
|
58
59
|
- lib/capistrano/tasks/capistrano2.rb
|
59
|
-
- lib/capistrano/tasks/monit.
|
60
|
-
- lib/capistrano/tasks/sidekiq.
|
60
|
+
- lib/capistrano/tasks/monit.rake
|
61
|
+
- lib/capistrano/tasks/sidekiq.rake
|
61
62
|
- lib/generators/capistrano/sidekiq/monit/template_generator.rb
|
62
63
|
- lib/generators/capistrano/sidekiq/monit/templates/sidekiq_monit.conf.erb
|
63
64
|
homepage: https://github.com/seuros/capistrano-sidekiq
|
@@ -80,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
81
|
version: '0'
|
81
82
|
requirements: []
|
82
83
|
rubyforge_project:
|
83
|
-
rubygems_version: 2.4.
|
84
|
+
rubygems_version: 2.4.8
|
84
85
|
signing_key:
|
85
86
|
specification_version: 4
|
86
87
|
summary: Sidekiq integration for Capistrano
|