sidekiq-scheduler 2.0.4 → 2.0.5
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/Rakefile +3 -8
- data/lib/sidekiq/scheduler.rb +52 -9
- data/lib/sidekiq-scheduler/version.rb +1 -1
- data/lib/sidekiq-scheduler/web.rb +2 -1
- data/web/locales/cs.yml +9 -0
- data/web/locales/en.yml +9 -0
- data/web/views/recurring_jobs.erb +8 -8
- metadata +58 -58
- data/test/config.yml +0 -11
- data/test/fake_env.rb +0 -0
- data/test/lib/sidekiq/scheduler_test.rb +0 -326
- data/test/lib/sidekiq/web_test.rb +0 -72
- data/test/schedule_test.rb +0 -97
- data/test/support/direct_worker.rb +0 -6
- data/test/support/my_worker.rb +0 -3
- data/test/test_helper.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c13477c36de16f83f295c07f237a6182a2e8b422
|
4
|
+
data.tar.gz: 00bd5143e5c9a63038f4aa5ec879e9d1cb5d0389
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dab3552b21945d9fca703a2aa97de4ca0750b15236bffb95b80af82f14c9e10a8d1a5e2e0011105cdf6a47f51e63737cbb5293cfb8689faa16fce2fb4ad41a8f
|
7
|
+
data.tar.gz: 9db739424af1df7bef42f4bb418a2282c6962f0f1392da13dbe8e19a57bbd6587cb73888d714e2950669997a09c944cfb552350f8ca255b2af7a09c9b829e806
|
data/Rakefile
CHANGED
@@ -22,13 +22,8 @@ end
|
|
22
22
|
|
23
23
|
Bundler::GemHelper.install_tasks
|
24
24
|
|
25
|
-
require '
|
25
|
+
require 'rspec/core/rake_task'
|
26
26
|
|
27
|
-
|
28
|
-
t.libs << 'lib'
|
29
|
-
t.libs << 'test'
|
30
|
-
t.pattern = 'test/**/*_test.rb'
|
31
|
-
t.verbose = false
|
32
|
-
end
|
27
|
+
RSpec::Core::RakeTask.new('spec')
|
33
28
|
|
34
|
-
task default: :
|
29
|
+
task default: :spec
|
data/lib/sidekiq/scheduler.rb
CHANGED
@@ -91,7 +91,7 @@ module Sidekiq
|
|
91
91
|
# job should be scheduled regardless of what ENV['RAILS_ENV'] is set
|
92
92
|
# to.
|
93
93
|
if config['rails_env'].nil? || self.rails_env_matches?(config)
|
94
|
-
logger.info "Scheduling #{name} "
|
94
|
+
logger.info "Scheduling #{name} #{config}"
|
95
95
|
interval_defined = false
|
96
96
|
interval_types = %w{cron every at in}
|
97
97
|
interval_types.each do |interval_type|
|
@@ -135,15 +135,12 @@ module Sidekiq
|
|
135
135
|
|
136
136
|
# Enqueue a job based on a config hash
|
137
137
|
def self.enqueue_job(job_config)
|
138
|
-
config = job_config.dup
|
138
|
+
config = prepare_arguments(job_config.dup)
|
139
139
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
if defined?(ActiveJob::Enqueuing) && config['class'].included_modules.include?(ActiveJob::Enqueuing)
|
144
|
-
config['class'].new.enqueue(config)
|
140
|
+
if active_job_enqueue?(config['class'])
|
141
|
+
enque_with_active_job(config)
|
145
142
|
else
|
146
|
-
|
143
|
+
enque_with_sidekiq(config)
|
147
144
|
end
|
148
145
|
end
|
149
146
|
|
@@ -156,7 +153,7 @@ module Sidekiq
|
|
156
153
|
end
|
157
154
|
|
158
155
|
def self.rufus_scheduler
|
159
|
-
@rufus_scheduler ||= Rufus::Scheduler.new
|
156
|
+
@rufus_scheduler ||= Rufus::Scheduler.new(rufus_scheduler_options)
|
160
157
|
end
|
161
158
|
|
162
159
|
# Stops old rufus scheduler and creates a new one. Returns the new
|
@@ -202,5 +199,51 @@ module Sidekiq
|
|
202
199
|
end
|
203
200
|
end
|
204
201
|
|
202
|
+
def self.enque_with_active_job(config)
|
203
|
+
initialize_active_job(config['class'], config['args']).enqueue(config)
|
204
|
+
end
|
205
|
+
|
206
|
+
def self.enque_with_sidekiq(config)
|
207
|
+
Sidekiq::Client.push(config)
|
208
|
+
end
|
209
|
+
|
210
|
+
def self.initialize_active_job(klass, args)
|
211
|
+
if args.is_a?(Array)
|
212
|
+
klass.new(*args)
|
213
|
+
else
|
214
|
+
klass.new(args)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
# Returns true if the enqueuing needs to be done for an ActiveJob
|
219
|
+
# class false otherwise.
|
220
|
+
#
|
221
|
+
# @param [Class] klass the class to check is decendant from ActiveJob
|
222
|
+
#
|
223
|
+
# @return [Boolean]
|
224
|
+
def self.active_job_enqueue?(klass)
|
225
|
+
defined?(ActiveJob::Enqueuing) && klass.included_modules.include?(ActiveJob::Enqueuing)
|
226
|
+
end
|
227
|
+
|
228
|
+
# Convert the given arguments in the format expected to be enqueued.
|
229
|
+
#
|
230
|
+
# @param [Hash] config the options to be converted
|
231
|
+
# @option config [String] class the job class
|
232
|
+
# @option config [Hash/Array] args the arguments to be passed to the job
|
233
|
+
# class
|
234
|
+
#
|
235
|
+
# @return [Hash]
|
236
|
+
def self.prepare_arguments(config)
|
237
|
+
config['class'] = config['class'].constantize if config['class'].is_a?(String)
|
238
|
+
|
239
|
+
if config['args'].is_a?(Hash)
|
240
|
+
config['args'].symbolize_keys! if config['args'].respond_to?(:symbolize_keys!)
|
241
|
+
else
|
242
|
+
config['args'] = Array(config['args'])
|
243
|
+
end
|
244
|
+
|
245
|
+
config
|
246
|
+
end
|
247
|
+
|
205
248
|
end
|
206
249
|
end
|
@@ -22,4 +22,5 @@ end
|
|
22
22
|
|
23
23
|
require 'sidekiq/web' unless defined?(Sidekiq::Web)
|
24
24
|
Sidekiq::Web.register(SidekiqScheduler::Web)
|
25
|
-
Sidekiq::Web.tabs['
|
25
|
+
Sidekiq::Web.tabs['recurring_jobs'] = 'recurring-jobs'
|
26
|
+
Sidekiq::Web.set :locales, Sidekiq::Web.locales << File.expand_path(File.dirname(__FILE__) + "/../../web/locales")
|
data/web/locales/cs.yml
ADDED
data/web/locales/en.yml
ADDED
@@ -1,15 +1,15 @@
|
|
1
|
-
<h3
|
1
|
+
<h3><%= t('recurring_jobs') %></h3>
|
2
2
|
|
3
3
|
<div class="table_container">
|
4
4
|
<table class="table table-hover table-bordered table-striped table-white">
|
5
5
|
<thead>
|
6
6
|
<tr>
|
7
|
-
<th
|
8
|
-
<th
|
9
|
-
<th
|
10
|
-
<th
|
11
|
-
<th
|
12
|
-
<th
|
7
|
+
<th><%= t('name') %></th>
|
8
|
+
<th><%= t('description') %></th>
|
9
|
+
<th><%= t('interval') %></th>
|
10
|
+
<th><%= t('class') %></th>
|
11
|
+
<th><%= t('queue') %></th>
|
12
|
+
<th><%= t('arguments') %></th>
|
13
13
|
<th></th>
|
14
14
|
</tr>
|
15
15
|
</thead>
|
@@ -27,7 +27,7 @@
|
|
27
27
|
<td><%= job_spec['args'] %></td>
|
28
28
|
<td class="text-center">
|
29
29
|
<a class="btn btn-warn btn-xs" href="<%= root_path %>recurring-jobs/<%= URI.escape(name) %>/enqueue">
|
30
|
-
|
30
|
+
<%= t('enqueue_now') %>
|
31
31
|
</a>
|
32
32
|
</td>
|
33
33
|
</tr>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Morton Jonuschat
|
@@ -9,202 +9,216 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-03-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sidekiq
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - '>='
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '3'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: redis
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ~>
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '3'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ~>
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '3'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rufus-scheduler
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ~>
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: 3.1.8
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- -
|
53
|
+
- - ~>
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: 3.1.8
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: multi_json
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- -
|
60
|
+
- - ~>
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '1'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: tilt
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ~>
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '2.0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ~>
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '2.0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: rake
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ~>
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '10.0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ~>
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '10.0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: timecop
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- -
|
102
|
+
- - ~>
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- -
|
109
|
+
- - ~>
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: mocha
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- -
|
116
|
+
- - ~>
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- -
|
123
|
+
- - ~>
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
127
|
+
name: rspec
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
|
-
- -
|
130
|
+
- - '>='
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: '
|
132
|
+
version: '0'
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
|
-
- -
|
137
|
+
- - '>='
|
138
138
|
- !ruby/object:Gem::Version
|
139
|
-
version: '
|
139
|
+
version: '0'
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
141
|
name: mock_redis
|
142
142
|
requirement: !ruby/object:Gem::Requirement
|
143
143
|
requirements:
|
144
|
-
- -
|
144
|
+
- - ~>
|
145
145
|
- !ruby/object:Gem::Version
|
146
146
|
version: '0'
|
147
147
|
type: :development
|
148
148
|
prerelease: false
|
149
149
|
version_requirements: !ruby/object:Gem::Requirement
|
150
150
|
requirements:
|
151
|
-
- -
|
151
|
+
- - ~>
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
154
|
- !ruby/object:Gem::Dependency
|
155
155
|
name: simplecov
|
156
156
|
requirement: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
|
-
- -
|
158
|
+
- - ~>
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '0'
|
161
161
|
type: :development
|
162
162
|
prerelease: false
|
163
163
|
version_requirements: !ruby/object:Gem::Requirement
|
164
164
|
requirements:
|
165
|
-
- -
|
165
|
+
- - ~>
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: activejob
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - '>='
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
type: :development
|
176
|
+
prerelease: false
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - '>='
|
166
180
|
- !ruby/object:Gem::Version
|
167
181
|
version: '0'
|
168
182
|
- !ruby/object:Gem::Dependency
|
169
183
|
name: coveralls
|
170
184
|
requirement: !ruby/object:Gem::Requirement
|
171
185
|
requirements:
|
172
|
-
- -
|
186
|
+
- - '>='
|
173
187
|
- !ruby/object:Gem::Version
|
174
188
|
version: '0'
|
175
189
|
type: :development
|
176
190
|
prerelease: false
|
177
191
|
version_requirements: !ruby/object:Gem::Requirement
|
178
192
|
requirements:
|
179
|
-
- -
|
193
|
+
- - '>='
|
180
194
|
- !ruby/object:Gem::Version
|
181
195
|
version: '0'
|
182
196
|
- !ruby/object:Gem::Dependency
|
183
197
|
name: rack-test
|
184
198
|
requirement: !ruby/object:Gem::Requirement
|
185
199
|
requirements:
|
186
|
-
- -
|
200
|
+
- - '>='
|
187
201
|
- !ruby/object:Gem::Version
|
188
202
|
version: '0'
|
189
203
|
type: :development
|
190
204
|
prerelease: false
|
191
205
|
version_requirements: !ruby/object:Gem::Requirement
|
192
206
|
requirements:
|
193
|
-
- -
|
207
|
+
- - '>='
|
194
208
|
- !ruby/object:Gem::Version
|
195
209
|
version: '0'
|
196
210
|
- !ruby/object:Gem::Dependency
|
197
211
|
name: sinatra
|
198
212
|
requirement: !ruby/object:Gem::Requirement
|
199
213
|
requirements:
|
200
|
-
- -
|
214
|
+
- - '>='
|
201
215
|
- !ruby/object:Gem::Version
|
202
216
|
version: '0'
|
203
217
|
type: :development
|
204
218
|
prerelease: false
|
205
219
|
version_requirements: !ruby/object:Gem::Requirement
|
206
220
|
requirements:
|
207
|
-
- -
|
221
|
+
- - '>='
|
208
222
|
- !ruby/object:Gem::Version
|
209
223
|
version: '0'
|
210
224
|
description: Light weight job scheduling extension for Sidekiq that adds support for
|
@@ -215,24 +229,18 @@ executables: []
|
|
215
229
|
extensions: []
|
216
230
|
extra_rdoc_files: []
|
217
231
|
files:
|
218
|
-
-
|
219
|
-
- README.md
|
220
|
-
- Rakefile
|
221
|
-
- lib/sidekiq-scheduler.rb
|
232
|
+
- lib/sidekiq/scheduler.rb
|
222
233
|
- lib/sidekiq-scheduler/manager.rb
|
223
234
|
- lib/sidekiq-scheduler/schedule.rb
|
224
235
|
- lib/sidekiq-scheduler/version.rb
|
225
236
|
- lib/sidekiq-scheduler/web.rb
|
226
|
-
- lib/sidekiq
|
227
|
-
-
|
228
|
-
-
|
229
|
-
- test/lib/sidekiq/scheduler_test.rb
|
230
|
-
- test/lib/sidekiq/web_test.rb
|
231
|
-
- test/schedule_test.rb
|
232
|
-
- test/support/direct_worker.rb
|
233
|
-
- test/support/my_worker.rb
|
234
|
-
- test/test_helper.rb
|
237
|
+
- lib/sidekiq-scheduler.rb
|
238
|
+
- web/locales/cs.yml
|
239
|
+
- web/locales/en.yml
|
235
240
|
- web/views/recurring_jobs.erb
|
241
|
+
- MIT-LICENSE
|
242
|
+
- Rakefile
|
243
|
+
- README.md
|
236
244
|
homepage: https://github.com/moove-it/sidekiq-scheduler
|
237
245
|
licenses:
|
238
246
|
- MIT
|
@@ -243,26 +251,18 @@ require_paths:
|
|
243
251
|
- lib
|
244
252
|
required_ruby_version: !ruby/object:Gem::Requirement
|
245
253
|
requirements:
|
246
|
-
- -
|
254
|
+
- - '>='
|
247
255
|
- !ruby/object:Gem::Version
|
248
256
|
version: '0'
|
249
257
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
250
258
|
requirements:
|
251
|
-
- -
|
259
|
+
- - '>='
|
252
260
|
- !ruby/object:Gem::Version
|
253
261
|
version: '0'
|
254
262
|
requirements: []
|
255
263
|
rubyforge_project:
|
256
|
-
rubygems_version: 2.
|
264
|
+
rubygems_version: 2.0.14
|
257
265
|
signing_key:
|
258
266
|
specification_version: 4
|
259
267
|
summary: Light weight job scheduling extension for Sidekiq
|
260
|
-
test_files:
|
261
|
-
- test/config.yml
|
262
|
-
- test/fake_env.rb
|
263
|
-
- test/lib/sidekiq/scheduler_test.rb
|
264
|
-
- test/lib/sidekiq/web_test.rb
|
265
|
-
- test/schedule_test.rb
|
266
|
-
- test/support/direct_worker.rb
|
267
|
-
- test/support/my_worker.rb
|
268
|
-
- test/test_helper.rb
|
268
|
+
test_files: []
|
data/test/config.yml
DELETED
data/test/fake_env.rb
DELETED
File without changes
|
@@ -1,326 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ManagerTest < Minitest::Test
|
4
|
-
describe 'Sidekiq::Scheduler' do
|
5
|
-
|
6
|
-
before do
|
7
|
-
Sidekiq::Scheduler.enabled = true
|
8
|
-
Sidekiq::Scheduler.dynamic = false
|
9
|
-
Sidekiq.redis { |r| r.del(:schedules) }
|
10
|
-
Sidekiq.redis { |r| r.del(:schedules_changed) }
|
11
|
-
Sidekiq::Scheduler.clear_schedule!
|
12
|
-
Sidekiq::Scheduler.send(:class_variable_set, :@@scheduled_jobs, {})
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'sidekiq-scheduler enabled option is working' do
|
16
|
-
Sidekiq::Scheduler.enabled = false
|
17
|
-
assert_equal(0, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
|
18
|
-
Sidekiq.schedule = {
|
19
|
-
:some_ivar_job => {
|
20
|
-
'cron' => '* * * * *',
|
21
|
-
'class' => 'SomeIvarJob',
|
22
|
-
'args' => '/tmp'
|
23
|
-
}
|
24
|
-
}
|
25
|
-
|
26
|
-
Sidekiq::Scheduler.load_schedule!
|
27
|
-
|
28
|
-
assert_equal(0, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
|
29
|
-
refute Sidekiq::Scheduler.scheduled_jobs.include?(:some_ivar_job)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'enqueue constantizes' do
|
33
|
-
# The job should be loaded, since a missing rails_env means ALL envs.
|
34
|
-
ENV['RAILS_ENV'] = 'production'
|
35
|
-
config = {
|
36
|
-
'cron' => '* * * * *',
|
37
|
-
'class' => 'SomeRealClass',
|
38
|
-
'queue' => 'high',
|
39
|
-
'args' => '/tmp'
|
40
|
-
}
|
41
|
-
|
42
|
-
Sidekiq::Client.expects(:push).with(
|
43
|
-
{
|
44
|
-
'cron' => '* * * * *',
|
45
|
-
'class' => SomeRealClass,
|
46
|
-
'queue' => 'high',
|
47
|
-
'args' => ['/tmp']
|
48
|
-
}
|
49
|
-
)
|
50
|
-
Sidekiq::Scheduler.enqueue_job(config)
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'enqueue_job respects queue params' do
|
54
|
-
config = {
|
55
|
-
'cron' => '* * * * *',
|
56
|
-
'class' => 'SomeIvarJob',
|
57
|
-
'queue' => 'high'
|
58
|
-
}
|
59
|
-
|
60
|
-
Sidekiq::Client.expects(:push).with(
|
61
|
-
{
|
62
|
-
'cron' => '* * * * *',
|
63
|
-
'class' => SomeIvarJob,
|
64
|
-
'args' => [],
|
65
|
-
'queue' => 'high'
|
66
|
-
}
|
67
|
-
)
|
68
|
-
|
69
|
-
Sidekiq::Scheduler.enqueue_job(config)
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'config makes it into the rufus_scheduler' do
|
73
|
-
assert_equal(0, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
|
74
|
-
Sidekiq.schedule = {
|
75
|
-
:some_ivar_job => {
|
76
|
-
'cron' => '* * * * *',
|
77
|
-
'class' => 'SomeIvarJob',
|
78
|
-
'args' => '/tmp'
|
79
|
-
}
|
80
|
-
}
|
81
|
-
|
82
|
-
Sidekiq::Scheduler.load_schedule!
|
83
|
-
|
84
|
-
assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
|
85
|
-
assert Sidekiq::Scheduler.scheduled_jobs.include?(:some_ivar_job)
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'can pass options to the Rufus scheduler instance' do
|
89
|
-
options = { :lockfile => '/tmp/rufus_lock' }
|
90
|
-
|
91
|
-
Sidekiq::Scheduler.rufus_scheduler_options = options
|
92
|
-
Rufus::Scheduler.expects(:new).with(options)
|
93
|
-
|
94
|
-
Sidekiq::Scheduler.clear_schedule!
|
95
|
-
end
|
96
|
-
|
97
|
-
it 'can reload schedule' do
|
98
|
-
Sidekiq::Scheduler.dynamic = true
|
99
|
-
Sidekiq.schedule = {
|
100
|
-
:some_ivar_job => {
|
101
|
-
'cron' => '* * * * *',
|
102
|
-
'class' => 'SomeIvarJob',
|
103
|
-
'args' => '/tmp'
|
104
|
-
}
|
105
|
-
}
|
106
|
-
|
107
|
-
Sidekiq::Scheduler.load_schedule!
|
108
|
-
|
109
|
-
assert Sidekiq::Scheduler.scheduled_jobs.include?('some_ivar_job')
|
110
|
-
|
111
|
-
Sidekiq.redis { |r| r.del(:schedules) }
|
112
|
-
Sidekiq.redis do |r|
|
113
|
-
r.hset(
|
114
|
-
:schedules,
|
115
|
-
'some_ivar_job2',
|
116
|
-
MultiJson.encode(
|
117
|
-
{
|
118
|
-
'cron' => '* * * * *',
|
119
|
-
'class' => 'SomeIvarJob',
|
120
|
-
'args' => '/tmp/2'
|
121
|
-
}
|
122
|
-
)
|
123
|
-
)
|
124
|
-
end
|
125
|
-
|
126
|
-
Sidekiq::Scheduler.reload_schedule!
|
127
|
-
|
128
|
-
refute Sidekiq::Scheduler.scheduled_jobs.include?('some_ivar_job')
|
129
|
-
assert Sidekiq::Scheduler.scheduled_jobs.include?('some_ivar_job2')
|
130
|
-
|
131
|
-
assert_equal '/tmp/2', Sidekiq.schedule['some_ivar_job2']['args']
|
132
|
-
end
|
133
|
-
|
134
|
-
it 'reloads the schedule from redis after 5 seconds when dynamic' do
|
135
|
-
Sidekiq.redis { |r| r.flushdb }
|
136
|
-
Sidekiq::Scheduler.clear_schedule!
|
137
|
-
|
138
|
-
Sidekiq::Scheduler.dynamic = true
|
139
|
-
Sidekiq.schedule = {
|
140
|
-
:some_ivar_job => {
|
141
|
-
'cron' => '* * * * *',
|
142
|
-
'class' => 'SomeIvarJob',
|
143
|
-
'args' => '/tmp'
|
144
|
-
}
|
145
|
-
}
|
146
|
-
|
147
|
-
Sidekiq::Scheduler.load_schedule!
|
148
|
-
|
149
|
-
assert Sidekiq::Scheduler.scheduled_jobs.include?('some_ivar_job')
|
150
|
-
assert !Sidekiq::Scheduler.scheduled_jobs.include?('some_ivar_job2')
|
151
|
-
|
152
|
-
Sidekiq.set_schedule(
|
153
|
-
'some_ivar_job2',
|
154
|
-
{
|
155
|
-
'cron' => '* * * * *',
|
156
|
-
'class' => 'SomeIvarJob',
|
157
|
-
'args' => '/tmp/2'
|
158
|
-
}
|
159
|
-
)
|
160
|
-
|
161
|
-
Timecop.travel(7 * 60)
|
162
|
-
sleep 0.1
|
163
|
-
|
164
|
-
assert Sidekiq::Scheduler.scheduled_jobs.include?('some_ivar_job')
|
165
|
-
assert Sidekiq::Scheduler.scheduled_jobs.include?('some_ivar_job2')
|
166
|
-
end
|
167
|
-
|
168
|
-
|
169
|
-
it 'load_schedule_job loads a schedule' do
|
170
|
-
Sidekiq::Scheduler.load_schedule_job(
|
171
|
-
'some_ivar_job',
|
172
|
-
{
|
173
|
-
'cron' => '* * * * *',
|
174
|
-
'class' => 'SomeIvarJob',
|
175
|
-
'args' => '/tmp'
|
176
|
-
}
|
177
|
-
)
|
178
|
-
|
179
|
-
assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
|
180
|
-
assert_equal(1, Sidekiq::Scheduler.scheduled_jobs.size)
|
181
|
-
assert Sidekiq::Scheduler.scheduled_jobs.keys.include?('some_ivar_job')
|
182
|
-
end
|
183
|
-
|
184
|
-
it 'load_schedule_job with every with options' do
|
185
|
-
Sidekiq::Scheduler.load_schedule_job(
|
186
|
-
'some_ivar_job',
|
187
|
-
{
|
188
|
-
'every' => ['30s', {'first_in' => '60s'}],
|
189
|
-
'class' => 'SomeIvarJob',
|
190
|
-
'args' => '/tmp'
|
191
|
-
}
|
192
|
-
)
|
193
|
-
|
194
|
-
assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
|
195
|
-
assert_equal(1, Sidekiq::Scheduler.scheduled_jobs.size)
|
196
|
-
assert Sidekiq::Scheduler.scheduled_jobs.keys.include?('some_ivar_job')
|
197
|
-
assert Sidekiq::Scheduler.scheduled_jobs['some_ivar_job'].params.keys.include?(:first_in)
|
198
|
-
end
|
199
|
-
|
200
|
-
it 'load_schedule_job with cron with options' do
|
201
|
-
Sidekiq::Scheduler.load_schedule_job(
|
202
|
-
'some_ivar_job',
|
203
|
-
{
|
204
|
-
'cron' => ['* * * * *', {'allow_overlapping' => 'true'}],
|
205
|
-
'class' => 'SomeIvarJob',
|
206
|
-
'args' => '/tmp'
|
207
|
-
}
|
208
|
-
)
|
209
|
-
|
210
|
-
assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
|
211
|
-
assert_equal(1, Sidekiq::Scheduler.scheduled_jobs.size)
|
212
|
-
assert Sidekiq::Scheduler.scheduled_jobs.keys.include?('some_ivar_job')
|
213
|
-
assert Sidekiq::Scheduler.scheduled_jobs['some_ivar_job'].params.keys.include?(:allow_overlapping)
|
214
|
-
end
|
215
|
-
|
216
|
-
it 'load_schedule_job with at' do
|
217
|
-
Sidekiq::Scheduler.load_schedule_job(
|
218
|
-
'some_ivar_job',
|
219
|
-
{
|
220
|
-
'at' => "2013/12/12 12:30",
|
221
|
-
'class' => 'SomeIvarJob',
|
222
|
-
'args' => '/tmp'
|
223
|
-
}
|
224
|
-
)
|
225
|
-
|
226
|
-
assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
|
227
|
-
assert_equal(1, Sidekiq::Scheduler.scheduled_jobs.size)
|
228
|
-
assert Sidekiq::Scheduler.scheduled_jobs.keys.include?('some_ivar_job')
|
229
|
-
end
|
230
|
-
|
231
|
-
it 'load_schedule_job with in' do
|
232
|
-
Sidekiq::Scheduler.load_schedule_job(
|
233
|
-
'some_ivar_job',
|
234
|
-
{
|
235
|
-
'in' => "10d",
|
236
|
-
'class' => 'SomeIvarJob',
|
237
|
-
'args' => '/tmp'
|
238
|
-
}
|
239
|
-
)
|
240
|
-
|
241
|
-
assert_equal(1, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
|
242
|
-
assert_equal(1, Sidekiq::Scheduler.scheduled_jobs.size)
|
243
|
-
assert Sidekiq::Scheduler.scheduled_jobs.keys.include?('some_ivar_job')
|
244
|
-
end
|
245
|
-
|
246
|
-
it 'does not load the schedule without cron' do
|
247
|
-
Sidekiq::Scheduler.load_schedule_job(
|
248
|
-
'some_ivar_job',
|
249
|
-
{
|
250
|
-
'class' => 'SomeIvarJob',
|
251
|
-
'args' => '/tmp'
|
252
|
-
}
|
253
|
-
)
|
254
|
-
|
255
|
-
assert_equal(0, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
|
256
|
-
assert_equal(0, Sidekiq::Scheduler.scheduled_jobs.size)
|
257
|
-
assert !Sidekiq::Scheduler.scheduled_jobs.keys.include?('some_ivar_job')
|
258
|
-
end
|
259
|
-
|
260
|
-
it 'does not load the schedule with an empty cron' do
|
261
|
-
Sidekiq::Scheduler.load_schedule_job(
|
262
|
-
'some_ivar_job',
|
263
|
-
{
|
264
|
-
'cron' => '',
|
265
|
-
'class' => 'SomeIvarJob',
|
266
|
-
'args' => '/tmp'
|
267
|
-
}
|
268
|
-
)
|
269
|
-
|
270
|
-
assert_equal(0, Sidekiq::Scheduler.rufus_scheduler.jobs.size)
|
271
|
-
assert_equal(0, Sidekiq::Scheduler.scheduled_jobs.size)
|
272
|
-
assert !Sidekiq::Scheduler.scheduled_jobs.keys.include?('some_ivar_job')
|
273
|
-
end
|
274
|
-
|
275
|
-
it 'update_schedule' do
|
276
|
-
Sidekiq::Scheduler.dynamic = true
|
277
|
-
Sidekiq.schedule = {
|
278
|
-
'some_ivar_job' => {'cron' => '* * * * *', 'class' => 'SomeIvarJob', 'args' => '/tmp'},
|
279
|
-
'another_ivar_job' => {'cron' => '* * * * *', 'class' => 'SomeIvarJob', 'args' => '/tmp/5'},
|
280
|
-
'stay_put_job' => {'cron' => '* * * * *', 'class' => 'SomeJob', 'args' => '/tmp'}
|
281
|
-
}
|
282
|
-
|
283
|
-
Sidekiq::Scheduler.load_schedule!
|
284
|
-
|
285
|
-
Sidekiq::Scheduler.scheduled_jobs['some_ivar_job'].expects(:unschedule)
|
286
|
-
Sidekiq::Scheduler.scheduled_jobs['another_ivar_job'].expects(:unschedule)
|
287
|
-
|
288
|
-
Sidekiq.set_schedule(
|
289
|
-
'some_ivar_job',
|
290
|
-
{
|
291
|
-
'cron' => '* * * * *',
|
292
|
-
'class' => 'SomeIvarJob',
|
293
|
-
'args' => '/tmp/2'
|
294
|
-
}
|
295
|
-
)
|
296
|
-
Sidekiq.set_schedule(
|
297
|
-
'new_ivar_job',
|
298
|
-
{
|
299
|
-
'cron' => '* * * * *',
|
300
|
-
'class' => 'SomeJob',
|
301
|
-
'args' => '/tmp/3'
|
302
|
-
}
|
303
|
-
)
|
304
|
-
Sidekiq.set_schedule(
|
305
|
-
'stay_put_job',
|
306
|
-
{
|
307
|
-
'cron' => '* * * * *',
|
308
|
-
'class' => 'SomeJob',
|
309
|
-
'args' => '/tmp'
|
310
|
-
}
|
311
|
-
)
|
312
|
-
Sidekiq.remove_schedule('another_ivar_job')
|
313
|
-
|
314
|
-
Sidekiq::Scheduler.update_schedule
|
315
|
-
|
316
|
-
%w(some_ivar_job new_ivar_job stay_put_job).each do |job_name|
|
317
|
-
assert Sidekiq::Scheduler.scheduled_jobs.keys.include?(job_name)
|
318
|
-
assert Sidekiq.schedule.keys.include?(job_name)
|
319
|
-
end
|
320
|
-
assert !Sidekiq::Scheduler.scheduled_jobs.keys.include?('another_ivar_job')
|
321
|
-
assert !Sidekiq.schedule.keys.include?('another_ivar_job')
|
322
|
-
assert_equal 0, Sidekiq.redis { |r| r.scard(:schedules_changed) }
|
323
|
-
end
|
324
|
-
|
325
|
-
end
|
326
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'sidekiq-scheduler/web'
|
3
|
-
require 'rack/test'
|
4
|
-
|
5
|
-
class WebTest < MiniTest::Test
|
6
|
-
describe 'sidekiq-scheduler web' do
|
7
|
-
include Rack::Test::Methods
|
8
|
-
|
9
|
-
def app
|
10
|
-
Sidekiq::Web
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:jobs) do
|
14
|
-
{
|
15
|
-
'Foo Job' => {
|
16
|
-
'class' => 'FooClass',
|
17
|
-
'cron' => '0 * * * * US/Eastern',
|
18
|
-
'args' => [42],
|
19
|
-
'description' => 'Does foo things.'
|
20
|
-
},
|
21
|
-
|
22
|
-
'Bar Job' => {
|
23
|
-
'class' => 'BarClass',
|
24
|
-
'every' => '1h',
|
25
|
-
'args' => ['foo', 'bar'],
|
26
|
-
'queue' => 'special'
|
27
|
-
}
|
28
|
-
}
|
29
|
-
end
|
30
|
-
|
31
|
-
before do
|
32
|
-
# Sidekiq::WebHelpers expects the Redis client to return an id
|
33
|
-
Sidekiq.redis { |conn| conn.client.stubs(:id).returns('redis://127.0.0.1:1234/0') }
|
34
|
-
|
35
|
-
Sidekiq.schedule = jobs
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'shows schedule' do
|
39
|
-
get '/recurring-jobs'
|
40
|
-
|
41
|
-
assert(last_response.ok?)
|
42
|
-
|
43
|
-
assert_match(/Foo Job/, last_response.body)
|
44
|
-
assert_match(/FooClass/, last_response.body)
|
45
|
-
assert_match(/0 \* \* \* \* US\/Eastern/, last_response.body)
|
46
|
-
assert_match(/default/, last_response.body)
|
47
|
-
assert_match(/\[42\]/, last_response.body)
|
48
|
-
assert_match(/Does foo things\./, last_response.body)
|
49
|
-
|
50
|
-
assert_match(/Bar Job/, last_response.body)
|
51
|
-
assert_match(/BarClass/, last_response.body)
|
52
|
-
assert_match(/1h/, last_response.body)
|
53
|
-
assert_match(/special/, last_response.body)
|
54
|
-
assert_match(/\[\"foo\", \"bar\"\]/, last_response.body)
|
55
|
-
|
56
|
-
assert_match(/Enqueue now/, last_response.body)
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'enqueues particular job' do
|
60
|
-
job_name = jobs.keys.first
|
61
|
-
job = jobs[job_name]
|
62
|
-
|
63
|
-
Sidekiq::Scheduler.expects(:enqueue_job).with(job)
|
64
|
-
|
65
|
-
get "/recurring-jobs/#{URI.escape(job_name)}/enqueue"
|
66
|
-
|
67
|
-
assert(last_response.redirect?)
|
68
|
-
follow_redirect!
|
69
|
-
assert_equal(last_request.path, '/recurring-jobs')
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
data/test/schedule_test.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ScheduleTest < Minitest::Test
|
4
|
-
|
5
|
-
describe 'SidekiqScheduler::Schedule' do
|
6
|
-
|
7
|
-
def build_cron_hash
|
8
|
-
{
|
9
|
-
'cron' => '* * * * *',
|
10
|
-
'class' => 'SomeIvarJob',
|
11
|
-
'args' => '/tmp/75'
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
def only_cron_and_args
|
16
|
-
-> (key, _) { %w(cron args).include?(key) }
|
17
|
-
end
|
18
|
-
|
19
|
-
def job_from_redis(job_id)
|
20
|
-
MultiJson.decode(job_from_redis_without_decoding(job_id))
|
21
|
-
end
|
22
|
-
|
23
|
-
def job_from_redis_without_decoding(job_id)
|
24
|
-
Sidekiq.redis { |redis|
|
25
|
-
redis.hget(:schedules, job_id)
|
26
|
-
}
|
27
|
-
end
|
28
|
-
|
29
|
-
let(:cron_hash) { build_cron_hash }
|
30
|
-
let(:job_id) { 'my_ivar_job' }
|
31
|
-
let(:job_class_id) { 'SomeIvarJob' }
|
32
|
-
|
33
|
-
it 'schedule= sets the schedule' do
|
34
|
-
Sidekiq::Scheduler.dynamic = true
|
35
|
-
|
36
|
-
Sidekiq.schedule = {job_id => cron_hash}
|
37
|
-
|
38
|
-
assert_equal(cron_hash, job_from_redis(job_id))
|
39
|
-
end
|
40
|
-
|
41
|
-
it "schedule= uses job name as 'class' argument if it's missing" do
|
42
|
-
Sidekiq::Scheduler.dynamic = true
|
43
|
-
|
44
|
-
Sidekiq.schedule = {job_class_id => cron_hash.select(&only_cron_and_args)}
|
45
|
-
|
46
|
-
assert_equal(cron_hash, job_from_redis(job_class_id))
|
47
|
-
assert_equal(job_class_id, Sidekiq.schedule[job_class_id]['class'])
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'schedule= does not mutate argument' do
|
51
|
-
schedule = {job_class_id => cron_hash.select(&only_cron_and_args)}
|
52
|
-
|
53
|
-
Sidekiq.schedule = schedule
|
54
|
-
|
55
|
-
assert !schedule[job_class_id].key?('class')
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'set_schedule can set an individual schedule' do
|
59
|
-
Sidekiq.set_schedule(job_id, cron_hash)
|
60
|
-
|
61
|
-
assert_equal(cron_hash, job_from_redis(job_id))
|
62
|
-
assert Sidekiq.redis { |r| r.sismember(:schedules_changed, job_id) }
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'get_schedule returns a schedule' do
|
66
|
-
Sidekiq.redis { |r| r.hset(:schedules, job_id, MultiJson.encode(cron_hash)) }
|
67
|
-
|
68
|
-
assert_equal(cron_hash, Sidekiq.get_schedule(job_id))
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'remove_schedule removes a schedule' do
|
72
|
-
Sidekiq.redis { |r| r.hset(:schedules, job_id, MultiJson.encode(cron_hash)) }
|
73
|
-
|
74
|
-
Sidekiq.remove_schedule(job_id)
|
75
|
-
|
76
|
-
assert_equal nil, job_from_redis_without_decoding(job_id)
|
77
|
-
assert Sidekiq.redis{ |r| r.sismember(:schedules_changed, job_id) }
|
78
|
-
end
|
79
|
-
|
80
|
-
describe 'schedule update' do
|
81
|
-
let(:new_job_id) { 'my_ivar_job_2' }
|
82
|
-
let(:new_job_class_id) { 'SomeIvarJob2' }
|
83
|
-
|
84
|
-
before do
|
85
|
-
Sidekiq::Scheduler.dynamic = true
|
86
|
-
Sidekiq.schedule = {job_id => cron_hash}
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'schedule= adds new jobs to schedule and remove old ones' do
|
90
|
-
Sidekiq.schedule = {new_job_id => cron_hash}
|
91
|
-
|
92
|
-
assert_equal(cron_hash, job_from_redis(new_job_id))
|
93
|
-
assert_equal(nil, job_from_redis_without_decoding(job_id))
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
data/test/support/my_worker.rb
DELETED
data/test/test_helper.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'simplecov'
|
2
|
-
SimpleCov.start
|
3
|
-
|
4
|
-
require 'coveralls'
|
5
|
-
Coveralls.wear!
|
6
|
-
|
7
|
-
require 'minitest/autorun'
|
8
|
-
require 'minitest/pride'
|
9
|
-
require 'minitest/autorun'
|
10
|
-
require 'sidekiq-scheduler'
|
11
|
-
require 'mocha/setup'
|
12
|
-
require 'multi_json'
|
13
|
-
require 'mock_redis'
|
14
|
-
require 'timecop'
|
15
|
-
|
16
|
-
require 'sidekiq'
|
17
|
-
require 'sidekiq/util'
|
18
|
-
if Sidekiq.respond_to?(:logger)
|
19
|
-
Sidekiq.logger.level = Logger::ERROR
|
20
|
-
else
|
21
|
-
Sidekiq::Util.logger.level = Logger::ERROR
|
22
|
-
end
|
23
|
-
|
24
|
-
# Load support files
|
25
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
26
|
-
|
27
|
-
require 'sidekiq/redis_connection'
|
28
|
-
|
29
|
-
class MiniTest::Spec
|
30
|
-
before :each do
|
31
|
-
redis = MockRedis.new
|
32
|
-
client = Object.new
|
33
|
-
|
34
|
-
redis.stubs(:client).returns(client)
|
35
|
-
client.stubs(:location).returns('MockRedis')
|
36
|
-
|
37
|
-
Sidekiq::RedisConnection.stubs(:create).returns(ConnectionPool.new({}) { redis })
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
class SomeJob
|
42
|
-
include Sidekiq::Worker
|
43
|
-
def self.perform(_, _)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
class SomeIvarJob < SomeJob
|
48
|
-
sidekiq_options queue: :ivar
|
49
|
-
end
|
50
|
-
|
51
|
-
class SomeRealClass
|
52
|
-
include Sidekiq::Worker
|
53
|
-
sidekiq_options queue: :some_real_queue
|
54
|
-
end
|