resque-scheduler 2.2.0 → 2.3.0
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.
Potentially problematic release.
This version of resque-scheduler might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/.rubocop.yml +12 -3
- data/.travis.yml +8 -1
- data/AUTHORS.md +1 -0
- data/Gemfile +1 -1
- data/HISTORY.md +10 -0
- data/README.md +15 -5
- data/Rakefile +1 -1
- data/lib/resque/scheduler.rb +7 -4
- data/lib/resque/scheduler/lock/base.rb +3 -3
- data/lib/resque/scheduler/lock/resilient.rb +1 -1
- data/lib/resque/scheduler_locking.rb +1 -2
- data/lib/resque_scheduler.rb +2 -13
- data/lib/resque_scheduler/server.rb +2 -3
- data/lib/resque_scheduler/tasks.rb +1 -1
- data/lib/resque_scheduler/util.rb +34 -0
- data/lib/resque_scheduler/version.rb +1 -1
- data/resque-scheduler.gemspec +2 -1
- data/test/delayed_queue_test.rb +5 -8
- data/test/resque-web_test.rb +26 -8
- data/test/scheduler_test.rb +3 -3
- data/test/support/redis_instance.rb +2 -2
- data/test/test_helper.rb +8 -0
- metadata +10 -32
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YTM5YzMwMmUzNzYyNWJkMmY0MTJiOTc0MTIxMTA4MTBlNWY1ZWVmMw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
Zjc3ZTlmZWE5MDBjNGExYjkzZWEwZTk5NDMwYTI4NjIzNGJjM2Q5Ng==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
M2I1NDI0M2VmZGRkNTAyZTNjODJjNTI4YjRiN2QyYmIxMTk1ZDk5MjIzY2Jl
|
10
|
+
ZjJlMjE3MzM2MzFmMTA2ZWY3ZjdhMzY5NmQ3NWY0ODA5ZDE3ZDk4OWUzZmRh
|
11
|
+
MDhiZjUxZTJlZDdjZjdhYmU0NjRmMmE0NDg1YmE5ZjQ4MDA1YjE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZTFlN2RhYTljYzRjOTAyMzY2NzA2YTRiMzNiNWQwMDFmOGE3OThlZTUyZTVl
|
14
|
+
ODFkNDk3MDBiMmZhZmEyOTAwZDNkODgwNDQxMTEwNDRjM2QwNzk3OGI2OTYx
|
15
|
+
ZWU3NGIyMTA1Y2E2NWYwMWM1YjI2ZTkzOTdhNzhiYTJjYThlODU=
|
data/.rubocop.yml
CHANGED
@@ -2,18 +2,21 @@
|
|
2
2
|
# The point is for the user to remove these configuration records
|
3
3
|
# one by one as the offences are removed from the code base.
|
4
4
|
|
5
|
-
AccessControl:
|
6
|
-
Enabled: false
|
7
|
-
|
8
5
|
AlignParameters:
|
9
6
|
Enabled: false
|
10
7
|
|
11
8
|
AssignmentInCondition:
|
12
9
|
Enabled: false
|
13
10
|
|
11
|
+
BracesAroundHashParameters:
|
12
|
+
Enabled: false
|
13
|
+
|
14
14
|
CaseEquality:
|
15
15
|
Enabled: false
|
16
16
|
|
17
|
+
ClassLength:
|
18
|
+
Enabled: false
|
19
|
+
|
17
20
|
ClassVars:
|
18
21
|
Enabled: false
|
19
22
|
|
@@ -26,12 +29,18 @@ ColonMethodCall:
|
|
26
29
|
CommentAnnotation:
|
27
30
|
Enabled: false
|
28
31
|
|
32
|
+
CyclomaticComplexity:
|
33
|
+
Enabled: false
|
34
|
+
|
29
35
|
Documentation:
|
30
36
|
Enabled: false
|
31
37
|
|
32
38
|
EmptyLines:
|
33
39
|
Enabled: false
|
34
40
|
|
41
|
+
EmptyLinesAroundBody:
|
42
|
+
Enabled: false
|
43
|
+
|
35
44
|
Encoding:
|
36
45
|
Enabled: false
|
37
46
|
|
data/.travis.yml
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
---
|
2
1
|
language: ruby
|
3
2
|
rvm:
|
4
3
|
- ree
|
@@ -8,3 +7,11 @@ script: bundle exec rake rubocop test
|
|
8
7
|
notifications:
|
9
8
|
email:
|
10
9
|
recipients: daniel.buch+resque-scheduler@gmail.com
|
10
|
+
deploy:
|
11
|
+
provider: rubygems
|
12
|
+
api_key:
|
13
|
+
secure: dM97lL/jTu14mEHD2Ih/vQfZ8cWJWb+DQ8UKZjkD2JfYtvwEAlkPG9RrrDkSHb5qkYxG2VAhjyx/0MZJ0TsVL6wrLMC9gcJb3yomw2Sch2Noj68tEndiSUHnxrB9gKzbhHbjLQXDqYf4Hco9/PHHQp4piFPJhLzNZRehIuTJPcA=
|
14
|
+
gem: resque-scheduler
|
15
|
+
on:
|
16
|
+
tags: true
|
17
|
+
repo: resque/resque-scheduler
|
data/AUTHORS.md
CHANGED
data/Gemfile
CHANGED
data/HISTORY.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 2.3.0 (2013-11-07)
|
2
|
+
|
3
|
+
* Fix re-introduced `ThreadError` on Ruby 2
|
4
|
+
* **BREAKING CHANGE**: Added `RESQUE_SCHEDULER_INTERVAL` in place of `INTERVAL`
|
5
|
+
* Use `Float()` instead of `Integer()` to calculate poll sleep amount
|
6
|
+
* Upgraded dependence of Resque to support 1.25
|
7
|
+
* Add rufus scheduler `every` notice to README
|
8
|
+
* Use `Resque.validate` instead of custom `.validate_job!`
|
9
|
+
* Specify MIT license in gemspec
|
10
|
+
|
1
11
|
## 2.2.0 (2013-10-13)
|
2
12
|
|
3
13
|
* Locking rufus-scheduler dependency to `~> 2.0`
|
data/README.md
CHANGED
@@ -14,8 +14,8 @@ This table explains the version requirements for redis
|
|
14
14
|
|
15
15
|
| resque-scheduler version | required redis version|
|
16
16
|
|:-------------------------|----------------------:|
|
17
|
-
|
|
18
|
-
| >= 0.0.1 |
|
17
|
+
| ~> 2.0 | >= 3.0.0 |
|
18
|
+
| >= 0.0.1 | ~> 1.3 |
|
19
19
|
|
20
20
|
|
21
21
|
Job scheduling is supported in two different way: Recurring (scheduled) and
|
@@ -207,6 +207,11 @@ clear_leaderboards_moderator:
|
|
207
207
|
description: "This job will check Daemon every 30 seconds after 120 seconds after start"
|
208
208
|
```
|
209
209
|
|
210
|
+
IMPORTANT: Rufus `every` syntax will calculate jobs scheduling time starting from the moment of deploy,
|
211
|
+
resulting in resetting schedule time on every deploy, so it's probably a good idea to use it only for
|
212
|
+
frequent jobs (like every 10-30 minutes), otherwise - when you use something like `every 20h` and deploy once-twice per day -
|
213
|
+
it will schedule the job for 20 hours from deploy, resulting in a job to never be run.
|
214
|
+
|
210
215
|
NOTE: Six parameter cron's are also supported (as they supported by
|
211
216
|
rufus-scheduler which powers the resque-scheduler process). This allows you
|
212
217
|
to schedule jobs per second (ie: `"30 * * * * *"` would fire a job every 30
|
@@ -411,10 +416,15 @@ Resque::Scheduler.logfile = nil # that means, all messages go to STDOUT
|
|
411
416
|
|
412
417
|
### Polling frequency
|
413
418
|
|
414
|
-
You can pass
|
415
|
-
The default is 5 seconds, but for a
|
419
|
+
You can pass a `RESQUE_SCHEDULER_INTERVAL` option which is an integer or float
|
420
|
+
representing the polling frequency. The default is 5 seconds, but for a
|
421
|
+
semi-active app you may want to use a smaller value.
|
422
|
+
|
423
|
+
$ RESQUE_SCHEDULER_INTERVAL=1 rake resque:scheduler
|
416
424
|
|
417
|
-
|
425
|
+
**NOTE** This value was previously `INTERVAL` but was renamed to
|
426
|
+
`RESQUE_SCHEDULER_INTERVAL` to avoid clashing with the interval Resque
|
427
|
+
uses for its jobs.
|
418
428
|
|
419
429
|
### Plagiarism alert
|
420
430
|
|
data/Rakefile
CHANGED
data/lib/resque/scheduler.rb
CHANGED
@@ -220,7 +220,7 @@ module Resque
|
|
220
220
|
args = job_config['args'] || job_config[:args]
|
221
221
|
|
222
222
|
klass_name = job_config['class'] || job_config[:class]
|
223
|
-
klass =
|
223
|
+
klass = ResqueScheduler::Util.constantize(klass_name) rescue klass_name
|
224
224
|
|
225
225
|
params = args.is_a?(Hash) ? [args] : Array(args)
|
226
226
|
queue = job_config['queue'] || job_config[:queue] || Resque.queue_from_class(klass)
|
@@ -230,7 +230,7 @@ module Resque
|
|
230
230
|
# job class can not be constantized (via a requeue call from the web perhaps), fall
|
231
231
|
# back to enqueing normally via Resque::Job.create.
|
232
232
|
begin
|
233
|
-
|
233
|
+
ResqueScheduler::Util.constantize(job_klass).scheduled(queue, klass_name, *params)
|
234
234
|
rescue NameError
|
235
235
|
# Note that the custom job class (job_config['custom_job_class']) is the one enqueued
|
236
236
|
Resque::Job.create(queue, job_klass, *params)
|
@@ -313,8 +313,11 @@ module Resque
|
|
313
313
|
@shutdown = true
|
314
314
|
|
315
315
|
if @sleeping
|
316
|
-
|
317
|
-
|
316
|
+
thread = Thread.new do
|
317
|
+
Resque.clean_schedules
|
318
|
+
release_master_lock!
|
319
|
+
end
|
320
|
+
thread.join
|
318
321
|
exit
|
319
322
|
end
|
320
323
|
end
|
@@ -14,7 +14,7 @@ module Resque
|
|
14
14
|
|
15
15
|
# Attempts to acquire the lock. Returns true if successfully acquired.
|
16
16
|
def acquire!
|
17
|
-
|
17
|
+
fail NotImplementedError
|
18
18
|
end
|
19
19
|
|
20
20
|
def value
|
@@ -23,7 +23,7 @@ module Resque
|
|
23
23
|
|
24
24
|
# Returns true if you currently hold the lock.
|
25
25
|
def locked?
|
26
|
-
|
26
|
+
fail NotImplementedError
|
27
27
|
end
|
28
28
|
|
29
29
|
# Releases the lock.
|
@@ -31,7 +31,7 @@ module Resque
|
|
31
31
|
Resque.redis.del(key) == 1
|
32
32
|
end
|
33
33
|
|
34
|
-
|
34
|
+
private
|
35
35
|
|
36
36
|
# Extends the lock by `timeout` seconds.
|
37
37
|
def extend_lock!
|
data/lib/resque_scheduler.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'resque'
|
3
3
|
require 'resque_scheduler/version'
|
4
|
+
require 'resque_scheduler/util'
|
4
5
|
require 'resque/scheduler'
|
5
6
|
require 'resque_scheduler/plugin'
|
6
7
|
|
7
8
|
module ResqueScheduler
|
8
|
-
|
9
9
|
#
|
10
10
|
# Accepts a new schedule configuration of the form:
|
11
11
|
#
|
@@ -132,7 +132,7 @@ module ResqueScheduler
|
|
132
132
|
# for queueing. Until timestamp is in the past, the job will
|
133
133
|
# sit in the schedule list.
|
134
134
|
def enqueue_at(timestamp, klass, *args)
|
135
|
-
|
135
|
+
validate(klass)
|
136
136
|
enqueue_at_with_queue(queue_from_class(klass), timestamp, klass, *args)
|
137
137
|
end
|
138
138
|
|
@@ -330,16 +330,6 @@ module ResqueScheduler
|
|
330
330
|
end
|
331
331
|
end
|
332
332
|
|
333
|
-
def validate_job!(klass)
|
334
|
-
if klass.to_s.empty?
|
335
|
-
raise Resque::NoClassError.new("Jobs must be given a class.")
|
336
|
-
end
|
337
|
-
|
338
|
-
unless queue_from_class(klass)
|
339
|
-
raise Resque::NoQueueError.new("Jobs must be placed onto a queue.")
|
340
|
-
end
|
341
|
-
end
|
342
|
-
|
343
333
|
def prepare_schedule(schedule_hash)
|
344
334
|
prepared_hash = {}
|
345
335
|
schedule_hash.each do |name, job_spec|
|
@@ -349,7 +339,6 @@ module ResqueScheduler
|
|
349
339
|
end
|
350
340
|
prepared_hash
|
351
341
|
end
|
352
|
-
|
353
342
|
end
|
354
343
|
|
355
344
|
Resque.extend ResqueScheduler
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'resque_scheduler'
|
2
2
|
require 'resque/server'
|
3
|
-
|
4
3
|
# Extend Resque::Server to add tabs
|
5
4
|
module ResqueScheduler
|
6
5
|
|
@@ -16,7 +15,7 @@ module ResqueScheduler
|
|
16
15
|
end
|
17
16
|
|
18
17
|
def queue_from_class_name(class_name)
|
19
|
-
Resque.queue_from_class(
|
18
|
+
Resque.queue_from_class(ResqueScheduler::Util.constantize(class_name))
|
20
19
|
end
|
21
20
|
end
|
22
21
|
|
@@ -50,7 +49,7 @@ module ResqueScheduler
|
|
50
49
|
config_args = config_args.merge(submitted_args)
|
51
50
|
|
52
51
|
# Insert the args hash into config and queue the resque job
|
53
|
-
config = config.merge(
|
52
|
+
config = config.merge('args' => config_args)
|
54
53
|
Resque::Scheduler.enqueue_from_config(config)
|
55
54
|
redirect u("/overview")
|
56
55
|
end
|
@@ -25,7 +25,7 @@ namespace :resque do
|
|
25
25
|
Resque::Scheduler.dynamic = true if ENV['DYNAMIC_SCHEDULE']
|
26
26
|
Resque::Scheduler.verbose = true if ENV['VERBOSE']
|
27
27
|
Resque::Scheduler.logfile = ENV['LOGFILE'] if ENV['LOGFILE']
|
28
|
-
Resque::Scheduler.poll_sleep_amount =
|
28
|
+
Resque::Scheduler.poll_sleep_amount = Float(ENV['RESQUE_SCHEDULER_INTERVAL']) if ENV['RESQUE_SCHEDULER_INTERVAL']
|
29
29
|
Resque::Scheduler.run
|
30
30
|
end
|
31
31
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module ResqueScheduler
|
2
|
+
class Util
|
3
|
+
# In order to upgrade to resque(1.25) which has deprecated following methods ,
|
4
|
+
# we just added these usefull helpers back to use in Resque Scheduler.
|
5
|
+
# refer to: https://github.com/resque/resque-scheduler/pull/273
|
6
|
+
|
7
|
+
def self.constantize(camel_cased_word)
|
8
|
+
camel_cased_word = camel_cased_word.to_s
|
9
|
+
|
10
|
+
if camel_cased_word.include?('-')
|
11
|
+
camel_cased_word = classify(camel_cased_word)
|
12
|
+
end
|
13
|
+
|
14
|
+
names = camel_cased_word.split('::')
|
15
|
+
names.shift if names.empty? || names.first.empty?
|
16
|
+
|
17
|
+
constant = Object
|
18
|
+
names.each do |name|
|
19
|
+
args = Module.method(:const_get).arity != 1 ? [false] : []
|
20
|
+
|
21
|
+
if constant.const_defined?(name, *args)
|
22
|
+
constant = constant.const_get(name)
|
23
|
+
else
|
24
|
+
constant = constant.const_missing(name)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
constant
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.classify(dashed_word)
|
31
|
+
dashed_word.split('-').each { |part| part[0] = part[0].chr.upcase }.join
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/resque-scheduler.gemspec
CHANGED
@@ -13,6 +13,7 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.description = %q{Light weight job scheduling on top of Resque.
|
14
14
|
Adds methods enqueue_at/enqueue_in to schedule jobs in the future.
|
15
15
|
Also supports queueing jobs on a fixed, cron-like schedule.}
|
16
|
+
spec.license = 'MIT'
|
16
17
|
|
17
18
|
spec.files = `git ls-files`.split("\n")
|
18
19
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
@@ -27,6 +28,6 @@ Gem::Specification.new do |spec|
|
|
27
28
|
spec.add_development_dependency 'rubocop' unless RUBY_VERSION < '1.9'
|
28
29
|
|
29
30
|
spec.add_runtime_dependency 'redis', '>= 3.0.0'
|
30
|
-
spec.add_runtime_dependency 'resque',
|
31
|
+
spec.add_runtime_dependency 'resque', '~> 1.25'
|
31
32
|
spec.add_runtime_dependency 'rufus-scheduler', '~> 2.0'
|
32
33
|
end
|
data/test/delayed_queue_test.rb
CHANGED
@@ -9,7 +9,7 @@ context "DelayedQueue" do
|
|
9
9
|
|
10
10
|
test "enqueue_at adds correct list and zset" do
|
11
11
|
timestamp = Time.now + 1
|
12
|
-
encoded_job = Resque.encode(
|
12
|
+
encoded_job = Resque.encode(:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob))
|
13
13
|
|
14
14
|
assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
|
15
15
|
assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
|
@@ -37,7 +37,7 @@ context "DelayedQueue" do
|
|
37
37
|
|
38
38
|
test "enqueue_at with queue adds correct list and zset and queue" do
|
39
39
|
timestamp = Time.now + 1
|
40
|
-
encoded_job = Resque.encode(
|
40
|
+
encoded_job = Resque.encode(:class => SomeIvarJob.to_s, :args => ["path"], :queue => 'critical')
|
41
41
|
|
42
42
|
assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
|
43
43
|
assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
|
@@ -66,7 +66,7 @@ context "DelayedQueue" do
|
|
66
66
|
|
67
67
|
test "a job in the future doesn't come out" do
|
68
68
|
timestamp = Time.now + 600 # 10 minutes from now (in the future, shouldn't come out)
|
69
|
-
encoded_job = Resque.encode(
|
69
|
+
encoded_job = Resque.encode(:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob))
|
70
70
|
|
71
71
|
assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
|
72
72
|
assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
|
@@ -95,7 +95,7 @@ context "DelayedQueue" do
|
|
95
95
|
|
96
96
|
test "enqueue_at and enqueue_in are equivelent" do
|
97
97
|
timestamp = Time.now + 60
|
98
|
-
encoded_job = Resque.encode(
|
98
|
+
encoded_job = Resque.encode(:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob))
|
99
99
|
|
100
100
|
Resque.enqueue_at(timestamp, SomeIvarJob, "path")
|
101
101
|
Resque.enqueue_in(timestamp - Time.now, SomeIvarJob, "path")
|
@@ -267,7 +267,7 @@ context "DelayedQueue" do
|
|
267
267
|
|
268
268
|
test "remove_delayed removes job and returns the count" do
|
269
269
|
t = Time.now + 120
|
270
|
-
encoded_job = Resque.encode(
|
270
|
+
encoded_job = Resque.encode(:class => SomeIvarJob.to_s, :args => [], :queue => Resque.queue_from_class(SomeIvarJob))
|
271
271
|
Resque.enqueue_at(t, SomeIvarJob)
|
272
272
|
|
273
273
|
assert_equal(1, Resque.remove_delayed(SomeIvarJob))
|
@@ -358,9 +358,6 @@ context "DelayedQueue" do
|
|
358
358
|
end
|
359
359
|
|
360
360
|
test "invalid job class" do
|
361
|
-
assert_raise Resque::NoClassError do
|
362
|
-
Resque.enqueue_in(10, nil)
|
363
|
-
end
|
364
361
|
assert_raise Resque::NoQueueError do
|
365
362
|
Resque.enqueue_in(10, String) # string serves as invalid Job class
|
366
363
|
end
|
data/test/resque-web_test.rb
CHANGED
@@ -12,8 +12,22 @@ end
|
|
12
12
|
context "on GET to /schedule with scheduled jobs" do
|
13
13
|
setup do
|
14
14
|
ENV['rails_env'] = 'production'
|
15
|
-
Resque.schedule = {
|
16
|
-
|
15
|
+
Resque.schedule = {
|
16
|
+
'some_ivar_job' => {
|
17
|
+
'cron' => "* * * * *",
|
18
|
+
'class' => 'SomeIvarJob',
|
19
|
+
'args' => "/tmp",
|
20
|
+
'rails_env' => 'production'
|
21
|
+
},
|
22
|
+
'some_other_job' => {
|
23
|
+
'every' => ['5m'],
|
24
|
+
'queue' => 'high',
|
25
|
+
'class' => 'SomeOtherJob',
|
26
|
+
'args' => {
|
27
|
+
'b' => 'blah'
|
28
|
+
}
|
29
|
+
}
|
30
|
+
}
|
17
31
|
Resque::Scheduler.load_schedule!
|
18
32
|
get "/schedule"
|
19
33
|
end
|
@@ -34,14 +48,18 @@ end
|
|
34
48
|
def resque_schedule
|
35
49
|
{
|
36
50
|
'job_without_params' => {
|
37
|
-
'cron' =>
|
51
|
+
'cron' => '* * * * *',
|
38
52
|
'class' => 'JobWithoutParams',
|
39
|
-
'args' => {
|
53
|
+
'args' => {
|
54
|
+
'host' => 'localhost'
|
55
|
+
},
|
40
56
|
'rails_env' => 'production'},
|
41
57
|
'job_with_params' => {
|
42
|
-
'cron' =>
|
58
|
+
'cron' => '* * * * *',
|
43
59
|
'class' => 'JobWithParams',
|
44
|
-
'args' => {
|
60
|
+
'args' => {
|
61
|
+
'host' => 'localhost'
|
62
|
+
},
|
45
63
|
'parameters' => {
|
46
64
|
'log_level' => {
|
47
65
|
'description' => 'The level of logging',
|
@@ -99,8 +117,8 @@ context "POST /schedule/requeue_with_params" do
|
|
99
117
|
log_level = 'error'
|
100
118
|
|
101
119
|
job_config = Resque.schedule[job_name]
|
102
|
-
args = job_config['args'].merge(
|
103
|
-
job_config = job_config.merge(
|
120
|
+
args = job_config['args'].merge('log_level' => log_level)
|
121
|
+
job_config = job_config.merge('args' => args)
|
104
122
|
|
105
123
|
Resque::Scheduler.stubs(:enqueue_from_config).once.with(job_config)
|
106
124
|
|
data/test/scheduler_test.rb
CHANGED
@@ -60,7 +60,7 @@ context "Resque::Scheduler" do
|
|
60
60
|
|
61
61
|
Resque.redis.del(:schedules)
|
62
62
|
Resque.redis.hset(:schedules, "some_ivar_job2", Resque.encode(
|
63
|
-
|
63
|
+
'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp/2"
|
64
64
|
))
|
65
65
|
|
66
66
|
Resque::Scheduler.reload_schedule!
|
@@ -232,7 +232,7 @@ context "Resque::Scheduler" do
|
|
232
232
|
|
233
233
|
test "get_schedule returns a schedule" do
|
234
234
|
Resque.redis.hset(:schedules, "some_ivar_job2", Resque.encode(
|
235
|
-
|
235
|
+
'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp/33"
|
236
236
|
))
|
237
237
|
assert_equal({'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp/33"},
|
238
238
|
Resque.get_schedule("some_ivar_job2"))
|
@@ -240,7 +240,7 @@ context "Resque::Scheduler" do
|
|
240
240
|
|
241
241
|
test "remove_schedule removes a schedule" do
|
242
242
|
Resque.redis.hset(:schedules, "some_ivar_job3", Resque.encode(
|
243
|
-
|
243
|
+
'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp/44"
|
244
244
|
))
|
245
245
|
Resque.remove_schedule("some_ivar_job3")
|
246
246
|
assert_equal nil, Resque.redis.hget(:schedules, "some_ivar_job3")
|
@@ -28,7 +28,7 @@ class RedisInstance
|
|
28
28
|
RedisInstance.stop!
|
29
29
|
end
|
30
30
|
else
|
31
|
-
|
31
|
+
fail "Failed to start Redis on port #{port}."
|
32
32
|
end
|
33
33
|
|
34
34
|
@running = true
|
@@ -47,7 +47,7 @@ class RedisInstance
|
|
47
47
|
@running
|
48
48
|
end
|
49
49
|
|
50
|
-
|
50
|
+
private
|
51
51
|
|
52
52
|
def wait_for_redis_boot
|
53
53
|
Timeout::timeout(10) do
|
data/test/test_helper.rb
CHANGED
@@ -84,6 +84,14 @@ class SomeRealClass
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
+
class JobWithParams
|
88
|
+
def self.perform(*args)
|
89
|
+
@args = args
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
JobWithoutParams = Class.new(JobWithParams)
|
94
|
+
|
87
95
|
def nullify_logger
|
88
96
|
Resque::Scheduler.mute = nil
|
89
97
|
Resque::Scheduler.verbose = nil
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
5
|
-
prerelease:
|
4
|
+
version: 2.3.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ben VandenBos
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-11-07 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: mocha
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rack-test
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ! '>='
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rubocop
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ! '>='
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -94,7 +83,6 @@ dependencies:
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: redis
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - ! '>='
|
100
88
|
- !ruby/object:Gem::Version
|
@@ -102,7 +90,6 @@ dependencies:
|
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - ! '>='
|
108
95
|
- !ruby/object:Gem::Version
|
@@ -110,29 +97,20 @@ dependencies:
|
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: resque
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 1.20.0
|
118
|
-
- - <
|
101
|
+
- - ~>
|
119
102
|
- !ruby/object:Gem::Version
|
120
103
|
version: '1.25'
|
121
104
|
type: :runtime
|
122
105
|
prerelease: false
|
123
106
|
version_requirements: !ruby/object:Gem::Requirement
|
124
|
-
none: false
|
125
107
|
requirements:
|
126
|
-
- -
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
version: 1.20.0
|
129
|
-
- - <
|
108
|
+
- - ~>
|
130
109
|
- !ruby/object:Gem::Version
|
131
110
|
version: '1.25'
|
132
111
|
- !ruby/object:Gem::Dependency
|
133
112
|
name: rufus-scheduler
|
134
113
|
requirement: !ruby/object:Gem::Requirement
|
135
|
-
none: false
|
136
114
|
requirements:
|
137
115
|
- - ~>
|
138
116
|
- !ruby/object:Gem::Version
|
@@ -140,7 +118,6 @@ dependencies:
|
|
140
118
|
type: :runtime
|
141
119
|
prerelease: false
|
142
120
|
version_requirements: !ruby/object:Gem::Requirement
|
143
|
-
none: false
|
144
121
|
requirements:
|
145
122
|
- - ~>
|
146
123
|
- !ruby/object:Gem::Version
|
@@ -179,6 +156,7 @@ files:
|
|
179
156
|
- lib/resque_scheduler/server/views/requeue-params.erb
|
180
157
|
- lib/resque_scheduler/server/views/scheduler.erb
|
181
158
|
- lib/resque_scheduler/tasks.rb
|
159
|
+
- lib/resque_scheduler/util.rb
|
182
160
|
- lib/resque_scheduler/version.rb
|
183
161
|
- resque-scheduler.gemspec
|
184
162
|
- script/migrate_to_timestamps_set.rb
|
@@ -194,28 +172,28 @@ files:
|
|
194
172
|
- test/support/redis_instance.rb
|
195
173
|
- test/test_helper.rb
|
196
174
|
homepage: http://github.com/resque/resque-scheduler
|
197
|
-
licenses:
|
175
|
+
licenses:
|
176
|
+
- MIT
|
177
|
+
metadata: {}
|
198
178
|
post_install_message:
|
199
179
|
rdoc_options: []
|
200
180
|
require_paths:
|
201
181
|
- - lib
|
202
182
|
required_ruby_version: !ruby/object:Gem::Requirement
|
203
|
-
none: false
|
204
183
|
requirements:
|
205
184
|
- - ! '>='
|
206
185
|
- !ruby/object:Gem::Version
|
207
186
|
version: '0'
|
208
187
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
|
-
none: false
|
210
188
|
requirements:
|
211
189
|
- - ! '>='
|
212
190
|
- !ruby/object:Gem::Version
|
213
191
|
version: '0'
|
214
192
|
requirements: []
|
215
193
|
rubyforge_project:
|
216
|
-
rubygems_version:
|
194
|
+
rubygems_version: 2.0.3
|
217
195
|
signing_key:
|
218
|
-
specification_version:
|
196
|
+
specification_version: 4
|
219
197
|
summary: Light weight job scheduling on top of Resque
|
220
198
|
test_files:
|
221
199
|
- test/delayed_queue_test.rb
|