delayed_job_recurring 0.3.6 → 0.3.7
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/README.md +42 -1
- data/lib/delayed/recurring_job.rb +20 -10
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fff505d7e12a6ba0aad2e7f8dd6ead4986a30980
|
4
|
+
data.tar.gz: 12910c837cc398f16dae86c1acaa8387a8b36e18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bde7769c64e1e7202481cb79f455a652ddf6ad952fc0fe59167e39c070f67ebf7748f487fb124874312ede5ea2125dac6bee441b5a0a8a05eb3af26344701675
|
7
|
+
data.tar.gz: 2d7759c1d9860038b5a3ea7dbd53702ab44ad7243b0c9537f30cdfc2f32ad8e362c5f55da777a93aca4fad8dec98a0fdb3a596bb55d4872df285e962d7d79722
|
data/README.md
CHANGED
@@ -28,12 +28,41 @@ class MyTask
|
|
28
28
|
end
|
29
29
|
```
|
30
30
|
|
31
|
-
|
31
|
+
Finally, schedule it:
|
32
32
|
|
33
33
|
```ruby
|
34
34
|
MyTask.schedule! # run every day at 11am Pacific time (accounting for daylight savings)
|
35
35
|
```
|
36
36
|
|
37
|
+
The best practice is to add your `MyTask.schedule!` lines to a rake file, e.g.
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
# lib/tasks/recurring_jobs.rake
|
41
|
+
|
42
|
+
namespace :recurring
|
43
|
+
task init: :environment do
|
44
|
+
MyTask.schedule!
|
45
|
+
MyOtherTask.schedule!
|
46
|
+
|
47
|
+
if Rails.env.production?
|
48
|
+
MyProductionOnlyTask.schedule!
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
```
|
53
|
+
|
54
|
+
and invoke this job by running `rake recurring:init` on each deployment.
|
55
|
+
|
56
|
+
Alternatively, if your app only has one instance running, you can put your
|
57
|
+
`schedule!` calls into an initializer, and then your jobs will be automatically
|
58
|
+
scheduled when your app starts. However, if you have more than one instance of
|
59
|
+
your app running in production, this will lead to a race condition and you will
|
60
|
+
end up with duplicate recurring jobs in the queue.
|
61
|
+
|
62
|
+
## ActiveJob
|
63
|
+
|
64
|
+
Note: your task class should **not** inherit from ActiveJob::Base.
|
65
|
+
|
37
66
|
## Advanced usage
|
38
67
|
|
39
68
|
### Passing options to schedule
|
@@ -54,6 +83,18 @@ MyTask.schedule(run_every: 1.day, run_at: ['11:00', '6:00pm']
|
|
54
83
|
MyTask.schedule(run_every: 1.week, run_at: ['sunday 8:00am', 'wednesday 8:00am'])
|
55
84
|
```
|
56
85
|
|
86
|
+
### Scheduling multiple jobs of same class
|
87
|
+
|
88
|
+
By default, before scheduling a new job, the old jobs scheduled with the same class will be unscheduled.
|
89
|
+
|
90
|
+
To schedule multiple jobs with same class, pass an unique matching param `job_matching_param` and value for that matching param in each job as below:
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
MyTask.schedule(run_at: '12:00', job_matching_param: 'schedule_id', schedule_id: 2)
|
94
|
+
```
|
95
|
+
|
96
|
+
This allows you to schedule multiple jobs with same class if value of the unique matching param(which is `schedule_id` in above example) is different in each job.
|
97
|
+
|
57
98
|
## Thanks!
|
58
99
|
|
59
100
|
Many thanks to @ginjo and @kares for their work! This code was derived from https://gist.github.com/ginjo/3688965.
|
@@ -41,8 +41,7 @@ module Delayed
|
|
41
41
|
enqueue_opts[:queue] = @schedule_options[:queue] if @schedule_options[:queue]
|
42
42
|
|
43
43
|
Delayed::Job.transaction do
|
44
|
-
self.class.jobs.destroy_all
|
45
|
-
|
44
|
+
self.class.jobs(@schedule_options).destroy_all
|
46
45
|
if Gem.loaded_specs['delayed_job'].version.to_s.first.to_i < 3
|
47
46
|
Delayed::Job.enqueue self, enqueue_opts[:priority], enqueue_opts[:run_at]
|
48
47
|
else
|
@@ -161,29 +160,40 @@ module Delayed
|
|
161
160
|
end
|
162
161
|
|
163
162
|
# Show all jobs for this schedule
|
164
|
-
def jobs
|
165
|
-
|
163
|
+
def jobs(options = {})
|
164
|
+
options = options.with_indifferent_access
|
165
|
+
|
166
|
+
# Construct dynamic query with 'job_matching_param' if present
|
167
|
+
query = ["((handler LIKE ?) OR (handler LIKE ?))", "--- !ruby/object:#{name} %", "--- !ruby/object:#{name}\n%"]
|
168
|
+
if options[:job_matching_param].present?
|
169
|
+
matching_key = options[:job_matching_param]
|
170
|
+
matching_value = options[matching_key]
|
171
|
+
query[0] = "#{query[0]} AND handler LIKE ?"
|
172
|
+
query << "%#{matching_key}: #{matching_value}%"
|
173
|
+
end
|
174
|
+
|
175
|
+
::Delayed::Job.where(query)
|
166
176
|
end
|
167
177
|
|
168
178
|
# Remove all jobs for this schedule (Stop the schedule)
|
169
|
-
def unschedule
|
170
|
-
jobs.each{|j| j.destroy}
|
179
|
+
def unschedule(options = {})
|
180
|
+
jobs(options).each{|j| j.destroy}
|
171
181
|
end
|
172
182
|
|
173
183
|
# Main interface to start this schedule (adds it to the jobs table).
|
174
184
|
# Pass in a time to run the first job (nil runs the first job at run_interval from now).
|
175
185
|
def schedule(options = {})
|
176
|
-
schedule!(options) unless scheduled?
|
186
|
+
schedule!(options) unless scheduled?(options)
|
177
187
|
end
|
178
188
|
|
179
189
|
def schedule!(options = {})
|
180
190
|
return unless Delayed::Worker.delay_jobs
|
181
|
-
unschedule
|
191
|
+
unschedule(options)
|
182
192
|
new.schedule!(options)
|
183
193
|
end
|
184
194
|
|
185
|
-
def scheduled?
|
186
|
-
jobs.count > 0
|
195
|
+
def scheduled?(options = {})
|
196
|
+
jobs(options).count > 0
|
187
197
|
end
|
188
198
|
|
189
199
|
def inherited(subclass)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_job_recurring
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Novak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -44,28 +44,28 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.
|
47
|
+
version: 3.6.0
|
48
48
|
type: :development
|
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: 3.
|
54
|
+
version: 3.6.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec-rails
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.
|
61
|
+
version: 3.6.1
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.
|
68
|
+
version: 3.6.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sqlite3
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|