capistrano-sidekiq 0.5.3 → 0.5.4
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 +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
|