sidekiq 2.17.8 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sidekiq might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/3.0-Upgrade.md +63 -0
- data/Changes.md +66 -3
- data/Contributing.md +1 -3
- data/Pro-Changes.md +18 -0
- data/README.md +2 -2
- data/bin/sidekiqctl +19 -6
- data/lib/sidekiq.rb +53 -11
- data/lib/sidekiq/actor.rb +1 -0
- data/lib/sidekiq/api.rb +145 -58
- data/lib/sidekiq/cli.rb +22 -18
- data/lib/sidekiq/client.rb +44 -14
- data/lib/sidekiq/core_ext.rb +5 -8
- data/lib/sidekiq/exception_handler.rb +19 -28
- data/lib/sidekiq/fetch.rb +3 -3
- data/lib/sidekiq/launcher.rb +30 -3
- data/lib/sidekiq/logging.rb +2 -2
- data/lib/sidekiq/manager.rb +19 -16
- data/lib/sidekiq/middleware/chain.rb +1 -1
- data/lib/sidekiq/middleware/i18n.rb +1 -1
- data/lib/sidekiq/middleware/server/retry_jobs.rb +23 -7
- data/lib/sidekiq/processor.rb +36 -54
- data/lib/sidekiq/redis_connection.rb +1 -3
- data/lib/sidekiq/util.rb +4 -4
- data/lib/sidekiq/version.rb +1 -1
- data/lib/sidekiq/web.rb +57 -8
- data/lib/sidekiq/web_helpers.rb +6 -15
- data/lib/sidekiq/worker.rb +3 -1
- data/sidekiq.gemspec +5 -5
- data/test/test_api.rb +59 -19
- data/test/test_cli.rb +1 -1
- data/test/test_client.rb +44 -5
- data/test/test_exception_handler.rb +4 -87
- data/test/test_middleware.rb +3 -2
- data/test/test_redis_connection.rb +0 -6
- data/test/test_retry.rb +13 -68
- data/test/test_scheduled.rb +1 -1
- data/test/test_scheduling.rb +5 -0
- data/test/test_sidekiq.rb +18 -0
- data/test/test_web.rb +98 -58
- data/web/assets/stylesheets/application.css +5 -0
- data/web/locales/cs.yml +68 -0
- data/web/locales/da.yml +9 -1
- data/web/locales/de.yml +15 -7
- data/web/locales/el.yml +68 -0
- data/web/locales/en.yml +8 -3
- data/web/locales/es.yml +9 -1
- data/web/locales/fr.yml +34 -26
- data/web/locales/it.yml +26 -18
- data/web/locales/ja.yml +8 -2
- data/web/locales/ko.yml +0 -2
- data/web/locales/nl.yml +8 -3
- data/web/locales/no.yml +9 -3
- data/web/locales/pl.yml +0 -1
- data/web/locales/pt-br.yml +11 -4
- data/web/locales/pt.yml +8 -1
- data/web/locales/ru.yml +29 -22
- data/web/locales/sv.yml +68 -0
- data/web/locales/zh-tw.yml +68 -0
- data/web/views/_job_info.erb +8 -2
- data/web/views/_summary.erb +13 -7
- data/web/views/busy.erb +55 -0
- data/web/views/dead.erb +30 -0
- data/web/views/layout.erb +1 -0
- data/web/views/morgue.erb +66 -0
- metadata +29 -30
- data/config.ru +0 -18
- data/lib/sidekiq/capistrano.rb +0 -5
- data/lib/sidekiq/capistrano2.rb +0 -54
- data/lib/sidekiq/tasks/sidekiq.rake +0 -119
- data/lib/sidekiq/yaml_patch.rb +0 -21
- data/test/test_util.rb +0 -18
- data/web/views/_workers.erb +0 -22
- data/web/views/workers.erb +0 -16
data/web/views/busy.erb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
<div class="row header">
|
2
|
+
<div class="col-sm-7">
|
3
|
+
<h3><%= t('Processes') %></h3>
|
4
|
+
</div>
|
5
|
+
</div>
|
6
|
+
|
7
|
+
<table class="processes table table-hover table-bordered table-striped table-white">
|
8
|
+
<thead>
|
9
|
+
<th><%= t('Name') %></th>
|
10
|
+
<th><%= t('Started') %></th>
|
11
|
+
<th><%= t('Threads') %></th>
|
12
|
+
<th><%= t('Busy') %></th>
|
13
|
+
</thead>
|
14
|
+
<% Sidekiq::ProcessSet.new.each_with_index do |process, index| %>
|
15
|
+
<tr>
|
16
|
+
<td><%= process['hostname'] %>:<%= process['pid'] %></td>
|
17
|
+
<td><%= relative_time(Time.at(process['started_at'])) %></td>
|
18
|
+
<td><%= process['concurrency'] %></td>
|
19
|
+
<td><%= process['busy'] %></td>
|
20
|
+
</tr>
|
21
|
+
<% end %>
|
22
|
+
</table>
|
23
|
+
|
24
|
+
<div class="row header">
|
25
|
+
<div class="col-sm-7">
|
26
|
+
<h3><%= t('Jobs') %></h3>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
|
30
|
+
<table class="workers table table-hover table-bordered table-striped table-white">
|
31
|
+
<thead>
|
32
|
+
<th><%= t('Process') %></th>
|
33
|
+
<th><%= t('TID') %></th>
|
34
|
+
<th><%= t('JID') %></th>
|
35
|
+
<th><%= t('Queue') %></th>
|
36
|
+
<th><%= t('Class') %></th>
|
37
|
+
<th><%= t('Arguments') %></th>
|
38
|
+
<th><%= t('Started') %></th>
|
39
|
+
</thead>
|
40
|
+
<% workers.each_with_index do |(process, thread, msg), index| %>
|
41
|
+
<tr>
|
42
|
+
<td><%= process %></td>
|
43
|
+
<td><%= thread %></td>
|
44
|
+
<td><%= msg['payload']['jid'] %></td>
|
45
|
+
<td>
|
46
|
+
<a href="<%= root_path %>queues/<%= msg['queue'] %>"><%= msg['queue'] %></a>
|
47
|
+
</td>
|
48
|
+
<td><%= msg['payload']['class'] %></td>
|
49
|
+
<td>
|
50
|
+
<div class="args"><%= display_args(msg['payload']['args']) %></div>
|
51
|
+
</td>
|
52
|
+
<td><%= relative_time(Time.at(msg['run_at'])) %></td>
|
53
|
+
</tr>
|
54
|
+
<% end %>
|
55
|
+
</table>
|
data/web/views/dead.erb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
<%= erb :_job_info, :locals => {:job => @dead, :type => :dead} %>
|
2
|
+
|
3
|
+
<h3><%= t('Error') %></h3>
|
4
|
+
<table class="error table table-bordered table-striped">
|
5
|
+
<tbody>
|
6
|
+
<tr>
|
7
|
+
<th><%= t('ErrorClass') %></th>
|
8
|
+
<td>
|
9
|
+
<code><%= @dead['error_class'] %></code>
|
10
|
+
</td>
|
11
|
+
</tr>
|
12
|
+
<tr>
|
13
|
+
<th><%= t('ErrorMessage') %></th>
|
14
|
+
<td><%= h(@dead['error_message']) %></td>
|
15
|
+
</tr>
|
16
|
+
<% if !@dead['error_backtrace'].nil? %>
|
17
|
+
<tr>
|
18
|
+
<th><%= t('ErrorBacktrace') %></th>
|
19
|
+
<td>
|
20
|
+
<code><%= @dead['error_backtrace'].join("<br/>") %></code>
|
21
|
+
</td>
|
22
|
+
</tr>
|
23
|
+
<% end %>
|
24
|
+
</tbody>
|
25
|
+
</table>
|
26
|
+
<form class="form-horizontal" action="<%= root_path %>morgue/<%= job_params(@dead, @dead.score) %>" method="post">
|
27
|
+
<a class="btn btn-default" href="<%= root_path %>morgue"><%= t('GoBack') %></a>
|
28
|
+
<input class="btn btn-primary" type="submit" name="retry" value="<%= t('RetryNow') %>" />
|
29
|
+
<input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>" />
|
30
|
+
</form>
|
data/web/views/layout.erb
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
<link href="<%= root_path %>stylesheets/application.css" media="screen" rel="stylesheet" type="text/css" />
|
8
8
|
<script type="text/javascript" src="<%= root_path %>javascripts/application.js"></script>
|
9
9
|
<script type="text/javascript" src="<%= root_path %>javascripts/locales/jquery.timeago.<%= locale %>.js"></script>
|
10
|
+
<meta name="google" value="notranslate" />
|
10
11
|
</head>
|
11
12
|
<body class="admin">
|
12
13
|
<div class="navbar navbar-default navbar-fixed-top">
|
@@ -0,0 +1,66 @@
|
|
1
|
+
<header class="row">
|
2
|
+
<div class="col-sm-5">
|
3
|
+
<h3><%= t('DeadJobs') %></h3>
|
4
|
+
</div>
|
5
|
+
<% if @dead.size > 0 && @total_size > @count %>
|
6
|
+
<div class="col-sm-4">
|
7
|
+
<%= erb :_paging, :locals => { :url => "#{root_path}morgue" } %>
|
8
|
+
</div>
|
9
|
+
<% end %>
|
10
|
+
<%= filtering('dead') %>
|
11
|
+
</header>
|
12
|
+
|
13
|
+
<% if @dead.size > 0 %>
|
14
|
+
<form action="<%= root_path %>morgue" method="post">
|
15
|
+
<table class="table table-striped table-bordered table-white">
|
16
|
+
<thead>
|
17
|
+
<tr>
|
18
|
+
<th width="20px" class="table-checkbox">
|
19
|
+
<label>
|
20
|
+
<input type="checkbox" class="check_all" />
|
21
|
+
</label>
|
22
|
+
</th>
|
23
|
+
<th width="25%"><%= t('LastRetry') %></th>
|
24
|
+
<th><%= t('Queue') %></th>
|
25
|
+
<th><%= t('Worker') %></th>
|
26
|
+
<th><%= t('Arguments') %></th>
|
27
|
+
<th><%= t('Error') %></th>
|
28
|
+
</tr>
|
29
|
+
</thead>
|
30
|
+
<% @dead.each do |entry| %>
|
31
|
+
<tr>
|
32
|
+
<td class="table-checkbox">
|
33
|
+
<label>
|
34
|
+
<input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' />
|
35
|
+
</label>
|
36
|
+
</td>
|
37
|
+
<td>
|
38
|
+
<a href="<%= root_path %>morgue/<%= job_params(entry.item, entry.score) %>"><%= relative_time(entry.at) %></a>
|
39
|
+
</td>
|
40
|
+
<td>
|
41
|
+
<a href="<%= root_path %>queues/<%= entry.queue %>"><%= entry.queue %></a>
|
42
|
+
</td>
|
43
|
+
<td><%= entry.klass %></td>
|
44
|
+
<td>
|
45
|
+
<div class="args"><%= display_args(entry.args) %></div>
|
46
|
+
</td>
|
47
|
+
<td>
|
48
|
+
<div><%= h truncate("#{entry['error_class']}: #{entry['error_message']}", 200) %></div>
|
49
|
+
</td>
|
50
|
+
</tr>
|
51
|
+
<% end %>
|
52
|
+
</table>
|
53
|
+
<input class="btn btn-primary btn-xs pull-left" type="submit" name="retry" value="<%= t('RetryNow') %>" />
|
54
|
+
<input class="btn btn-danger btn-xs pull-left" type="submit" name="delete" value="<%= t('Delete') %>" />
|
55
|
+
</form>
|
56
|
+
|
57
|
+
<form action="<%= root_path %>morgue/all/delete" method="post">
|
58
|
+
<input class="btn btn-danger btn-xs pull-right" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
59
|
+
</form>
|
60
|
+
<form action="<%= root_path %>morgue/all/retry" method="post">
|
61
|
+
<input class="btn btn-danger btn-xs pull-right" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
62
|
+
</form>
|
63
|
+
|
64
|
+
<% else %>
|
65
|
+
<div class="alert alert-success"><%= t('NoDeadJobsFound') %></div>
|
66
|
+
<% end %>
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Perham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.0.6
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 3.0.6
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: redis-namespace
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.3.1
|
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: 1.3.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: connection_pool
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.0.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.0.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: celluloid
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 0.15.2
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.15.2
|
69
69
|
- !ruby/object:Gem::Dependency
|
@@ -126,16 +126,16 @@ dependencies:
|
|
126
126
|
name: rails
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 4.0.
|
131
|
+
version: 4.0.0
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 4.0.
|
138
|
+
version: 4.0.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: coveralls
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -161,6 +161,7 @@ extra_rdoc_files: []
|
|
161
161
|
files:
|
162
162
|
- ".gitignore"
|
163
163
|
- ".travis.yml"
|
164
|
+
- 3.0-Upgrade.md
|
164
165
|
- COMM-LICENSE
|
165
166
|
- Changes.md
|
166
167
|
- Contributing.md
|
@@ -171,12 +172,9 @@ files:
|
|
171
172
|
- Rakefile
|
172
173
|
- bin/sidekiq
|
173
174
|
- bin/sidekiqctl
|
174
|
-
- config.ru
|
175
175
|
- lib/sidekiq.rb
|
176
176
|
- lib/sidekiq/actor.rb
|
177
177
|
- lib/sidekiq/api.rb
|
178
|
-
- lib/sidekiq/capistrano.rb
|
179
|
-
- lib/sidekiq/capistrano2.rb
|
180
178
|
- lib/sidekiq/cli.rb
|
181
179
|
- lib/sidekiq/client.rb
|
182
180
|
- lib/sidekiq/core_ext.rb
|
@@ -199,7 +197,6 @@ files:
|
|
199
197
|
- lib/sidekiq/rails.rb
|
200
198
|
- lib/sidekiq/redis_connection.rb
|
201
199
|
- lib/sidekiq/scheduled.rb
|
202
|
-
- lib/sidekiq/tasks/sidekiq.rake
|
203
200
|
- lib/sidekiq/testing.rb
|
204
201
|
- lib/sidekiq/testing/inline.rb
|
205
202
|
- lib/sidekiq/util.rb
|
@@ -207,7 +204,6 @@ files:
|
|
207
204
|
- lib/sidekiq/web.rb
|
208
205
|
- lib/sidekiq/web_helpers.rb
|
209
206
|
- lib/sidekiq/worker.rb
|
210
|
-
- lib/sidekiq/yaml_patch.rb
|
211
207
|
- sidekiq.gemspec
|
212
208
|
- test/config.yml
|
213
209
|
- test/env_based_config.yml
|
@@ -231,7 +227,6 @@ files:
|
|
231
227
|
- test/test_testing.rb
|
232
228
|
- test/test_testing_fake.rb
|
233
229
|
- test/test_testing_inline.rb
|
234
|
-
- test/test_util.rb
|
235
230
|
- test/test_web.rb
|
236
231
|
- web/assets/images/bootstrap/glyphicons-halflings-white.png
|
237
232
|
- web/assets/images/bootstrap/glyphicons-halflings.png
|
@@ -288,8 +283,10 @@ files:
|
|
288
283
|
- web/assets/javascripts/locales/jquery.timeago.zh-TW.js
|
289
284
|
- web/assets/stylesheets/application.css
|
290
285
|
- web/assets/stylesheets/bootstrap.css
|
286
|
+
- web/locales/cs.yml
|
291
287
|
- web/locales/da.yml
|
292
288
|
- web/locales/de.yml
|
289
|
+
- web/locales/el.yml
|
293
290
|
- web/locales/en.yml
|
294
291
|
- web/locales/es.yml
|
295
292
|
- web/locales/fr.yml
|
@@ -302,22 +299,25 @@ files:
|
|
302
299
|
- web/locales/pt-br.yml
|
303
300
|
- web/locales/pt.yml
|
304
301
|
- web/locales/ru.yml
|
302
|
+
- web/locales/sv.yml
|
303
|
+
- web/locales/zh-tw.yml
|
305
304
|
- web/views/_job_info.erb
|
306
305
|
- web/views/_nav.erb
|
307
306
|
- web/views/_paging.erb
|
308
307
|
- web/views/_poll.erb
|
309
308
|
- web/views/_status.erb
|
310
309
|
- web/views/_summary.erb
|
311
|
-
- web/views/
|
310
|
+
- web/views/busy.erb
|
312
311
|
- web/views/dashboard.erb
|
312
|
+
- web/views/dead.erb
|
313
313
|
- web/views/layout.erb
|
314
|
+
- web/views/morgue.erb
|
314
315
|
- web/views/queue.erb
|
315
316
|
- web/views/queues.erb
|
316
317
|
- web/views/retries.erb
|
317
318
|
- web/views/retry.erb
|
318
319
|
- web/views/scheduled.erb
|
319
320
|
- web/views/scheduled_job_info.erb
|
320
|
-
- web/views/workers.erb
|
321
321
|
homepage: http://sidekiq.org
|
322
322
|
licenses:
|
323
323
|
- LGPL-3.0
|
@@ -338,7 +338,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
338
338
|
version: '0'
|
339
339
|
requirements: []
|
340
340
|
rubyforge_project:
|
341
|
-
rubygems_version: 2.
|
341
|
+
rubygems_version: 2.2.2
|
342
342
|
signing_key:
|
343
343
|
specification_version: 4
|
344
344
|
summary: Simple, efficient background processing for Ruby
|
@@ -365,5 +365,4 @@ test_files:
|
|
365
365
|
- test/test_testing.rb
|
366
366
|
- test/test_testing_fake.rb
|
367
367
|
- test/test_testing_inline.rb
|
368
|
-
- test/test_util.rb
|
369
368
|
- test/test_web.rb
|
data/config.ru
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'sidekiq'
|
2
|
-
|
3
|
-
Sidekiq.configure_client do |config|
|
4
|
-
config.redis = { :size => 1 }
|
5
|
-
end
|
6
|
-
|
7
|
-
#Sidekiq.redis {|conn| conn.flushdb }
|
8
|
-
#10.times do |idx|
|
9
|
-
#Sidekiq::Client.push('class' => 'HardWorker', 'args' => ['foo', 0.1, idx])
|
10
|
-
#end
|
11
|
-
|
12
|
-
#Sidekiq.redis { |conn| conn.zadd('retry', Time.now.utc.to_f + 3000, MultiJson.encode({
|
13
|
-
#'class' => 'HardWorker', 'args' => ['foo', 0.1, Time.now.to_f],
|
14
|
-
#'queue' => 'default', 'error_message' => 'No such method', 'error_class' => 'NoMethodError',
|
15
|
-
#'failed_at' => Time.now.to_i, 'retry_count' => 0 })) }
|
16
|
-
|
17
|
-
require 'sidekiq/web'
|
18
|
-
run Sidekiq::Web
|
data/lib/sidekiq/capistrano.rb
DELETED
data/lib/sidekiq/capistrano2.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
Capistrano::Configuration.instance.load do
|
2
|
-
|
3
|
-
_cset(:sidekiq_default_hooks) { true }
|
4
|
-
_cset(:sidekiq_cmd) { "#{fetch(:bundle_cmd, "bundle")} exec sidekiq" }
|
5
|
-
_cset(:sidekiqctl_cmd) { "#{fetch(:bundle_cmd, "bundle")} exec sidekiqctl" }
|
6
|
-
_cset(:sidekiq_timeout) { 10 }
|
7
|
-
_cset(:sidekiq_role) { :app }
|
8
|
-
_cset(:sidekiq_pid) { "#{current_path}/tmp/pids/sidekiq.pid" }
|
9
|
-
_cset(:sidekiq_processes) { 1 }
|
10
|
-
|
11
|
-
if fetch(:sidekiq_default_hooks)
|
12
|
-
before "deploy:update_code", "sidekiq:quiet"
|
13
|
-
after "deploy:stop", "sidekiq:stop"
|
14
|
-
after "deploy:start", "sidekiq:start"
|
15
|
-
before "deploy:restart", "sidekiq:restart"
|
16
|
-
end
|
17
|
-
|
18
|
-
namespace :sidekiq do
|
19
|
-
def for_each_process(&block)
|
20
|
-
fetch(:sidekiq_processes).times do |idx|
|
21
|
-
yield((idx == 0 ? "#{fetch(:sidekiq_pid)}" : "#{fetch(:sidekiq_pid)}-#{idx}"), idx)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
desc "Quiet sidekiq (stop accepting new work)"
|
26
|
-
task :quiet, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
|
27
|
-
for_each_process do |pid_file, idx|
|
28
|
-
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"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
desc "Stop sidekiq"
|
33
|
-
task :stop, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
|
34
|
-
for_each_process do |pid_file, idx|
|
35
|
-
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"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
desc "Start sidekiq"
|
40
|
-
task :start, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
|
41
|
-
rails_env = fetch(:rails_env, "production")
|
42
|
-
for_each_process do |pid_file, idx|
|
43
|
-
run "cd #{current_path} ; nohup #{fetch(:sidekiq_cmd)} -e #{rails_env} -i #{idx} -P #{pid_file} >> #{current_path}/log/sidekiq.log 2>&1 &", :pty => false
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
desc "Restart sidekiq"
|
48
|
-
task :restart, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
|
49
|
-
stop
|
50
|
-
start
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
end
|
@@ -1,119 +0,0 @@
|
|
1
|
-
namespace :load do
|
2
|
-
task :defaults do
|
3
|
-
|
4
|
-
set :sidekiq_default_hooks, ->{ true }
|
5
|
-
|
6
|
-
# If you need a special boot commands
|
7
|
-
#
|
8
|
-
# set :sidekiq_cmd, ->{ "bundle exec sidekiq" }
|
9
|
-
# set :sidekiqctl_cmd, ->{ "bundle exec sidekiqctl" }
|
10
|
-
set :sidekiq_cmd, ->{ }
|
11
|
-
set :sidekiqctl_cmd, ->{ }
|
12
|
-
|
13
|
-
# If this changes, you'll need to manually
|
14
|
-
# stop the existing sidekiq process.
|
15
|
-
set :sidekiq_pid, ->{ "tmp/sidekiq.pid" }
|
16
|
-
|
17
|
-
# "-d -i INT -P PATH" are added automatically.
|
18
|
-
set :sidekiq_options, ->{ "-e #{fetch(:rails_env, 'production')} -L #{current_path}/log/sidekiq.log" }
|
19
|
-
|
20
|
-
set :sidekiq_timeout, ->{ 10 }
|
21
|
-
set :sidekiq_role, ->{ :app }
|
22
|
-
set :sidekiq_processes, ->{ 1 }
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
namespace :deploy do
|
27
|
-
before :starting, :check_sidekiq_hooks do
|
28
|
-
invoke 'sidekiq:add_default_hooks' if fetch(:sidekiq_default_hooks)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
namespace :sidekiq do
|
33
|
-
def for_each_process(&block)
|
34
|
-
fetch(:sidekiq_processes).times do |idx|
|
35
|
-
yield((idx == 0 ? "#{fetch(:sidekiq_pid)}" : "#{fetch(:sidekiq_pid)}-#{idx}"), idx)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def pid_full_path(pid_path)
|
40
|
-
if pid_path.start_with?("/")
|
41
|
-
pid_path
|
42
|
-
else
|
43
|
-
"#{current_path}/#{pid_path}"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
task :add_default_hooks do
|
48
|
-
after 'deploy:starting', 'sidekiq:quiet'
|
49
|
-
after 'deploy:updated', 'sidekiq:stop'
|
50
|
-
after 'deploy:reverted', 'sidekiq:stop'
|
51
|
-
after 'deploy:published', 'sidekiq:start'
|
52
|
-
end
|
53
|
-
|
54
|
-
desc "Quiet sidekiq (stop accepting new work)"
|
55
|
-
task :quiet do
|
56
|
-
on roles fetch(:sidekiq_role) do
|
57
|
-
for_each_process do |pid_file, idx|
|
58
|
-
if test "[ -f #{pid_full_path(pid_file)} ]"
|
59
|
-
within current_path do
|
60
|
-
if fetch(:sidekiqctl_cmd)
|
61
|
-
execute fetch(:sidekiqctl_cmd), 'quiet', "#{pid_full_path(pid_file)}"
|
62
|
-
else
|
63
|
-
execute :bundle, :exec, :sidekiqctl, 'quiet', "#{pid_full_path(pid_file)}"
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
desc "Stop sidekiq"
|
72
|
-
task :stop do
|
73
|
-
on roles fetch(:sidekiq_role) do
|
74
|
-
for_each_process do |pid_file, idx|
|
75
|
-
if test "[ -f #{pid_full_path(pid_file)} ]"
|
76
|
-
within current_path do
|
77
|
-
if fetch(:sidekiqctl_cmd)
|
78
|
-
execute fetch(:sidekiqctl_cmd), 'stop', "#{pid_full_path(pid_file)}", fetch(:sidekiq_timeout)
|
79
|
-
else
|
80
|
-
execute :bundle, :exec, :sidekiqctl, 'stop', "#{pid_full_path(pid_file)}", fetch(:sidekiq_timeout)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
desc "Start sidekiq"
|
89
|
-
task :start do
|
90
|
-
on roles fetch(:sidekiq_role) do
|
91
|
-
rails_env = fetch(:rails_env, "production")
|
92
|
-
within current_path do
|
93
|
-
for_each_process do |pid_file, idx|
|
94
|
-
if !defined? JRUBY_VERSION
|
95
|
-
if fetch(:sidekiq_cmd)
|
96
|
-
execute fetch(:sidekiq_cmd), "-d -i #{idx} -P #{pid_full_path(pid_file)} #{fetch(:sidekiq_options)}"
|
97
|
-
else
|
98
|
-
execute :bundle, :exec, :sidekiq, "-d -i #{idx} -P #{pid_full_path(pid_file)} #{fetch(:sidekiq_options)}"
|
99
|
-
end
|
100
|
-
else
|
101
|
-
execute "echo 'Since JRuby doesn't support Process.daemon, Sidekiq will be running without the -d flag."
|
102
|
-
if fetch(:sidekiq_cmd)
|
103
|
-
execute fetch(:sidekiq_cmd), "-i #{idx} -P #{pid_full_path(pid_file)} #{fetch(:sidekiq_options)} >/dev/null 2>&1 &"
|
104
|
-
else
|
105
|
-
execute :bundle, :exec, :sidekiq, "-i #{idx} -P #{pid_full_path(pid_file)} #{fetch(:sidekiq_options)} >/dev/null 2>&1 &"
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
desc "Restart sidekiq"
|
114
|
-
task :restart do
|
115
|
-
invoke 'sidekiq:stop'
|
116
|
-
invoke 'sidekiq:start'
|
117
|
-
end
|
118
|
-
|
119
|
-
end
|