delayed_job 2.0.5 → 2.0.6
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.
- data/lib/delayed/backend/active_record.rb +5 -27
- data/spec/backend/shared_backend_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +83 -54
- data/.gitignore +0 -3
- data/CHANGELOG +0 -57
- data/Rakefile +0 -45
- data/VERSION +0 -1
- data/benchmarks.rb +0 -33
- data/delayed_job.gemspec +0 -119
- data/generators/delayed_job/delayed_job_generator.rb +0 -22
- data/generators/delayed_job/templates/migration.rb +0 -22
- data/generators/delayed_job/templates/script +0 -5
- data/init.rb +0 -1
- data/rails/init.rb +0 -5
- data/tasks/jobs.rake +0 -1
@@ -30,10 +30,6 @@ module Delayed
|
|
30
30
|
}
|
31
31
|
named_scope :by_priority, :order => 'priority ASC, run_at ASC'
|
32
32
|
|
33
|
-
named_scope :locked_by_worker, lambda{|worker_name, max_run_time|
|
34
|
-
{:conditions => ['locked_by = ? AND locked_at > ?', worker_name, db_time_now - max_run_time]}
|
35
|
-
}
|
36
|
-
|
37
33
|
def self.after_fork
|
38
34
|
::ActiveRecord::Base.connection.reconnect!
|
39
35
|
end
|
@@ -42,33 +38,15 @@ module Delayed
|
|
42
38
|
def self.clear_locks!(worker_name)
|
43
39
|
update_all("locked_by = null, locked_at = null", ["locked_by = ?", worker_name])
|
44
40
|
end
|
45
|
-
|
46
|
-
|
41
|
+
|
42
|
+
# Find a few candidate jobs to run (in case some immediately get locked by others).
|
43
|
+
def self.find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time)
|
47
44
|
scope = self.ready_to_run(worker_name, max_run_time)
|
48
45
|
scope = scope.scoped(:conditions => ['priority >= ?', Worker.min_priority]) if Worker.min_priority
|
49
46
|
scope = scope.scoped(:conditions => ['priority <= ?', Worker.max_priority]) if Worker.max_priority
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
# Reserve a single job in a single update query. This causes workers to serialize on the
|
54
|
-
# database and avoids contention.
|
55
|
-
def self.reserve(worker, max_run_time = Worker.max_run_time)
|
56
|
-
affected_rows = 0
|
57
|
-
::ActiveRecord::Base.silence do
|
58
|
-
affected_rows = update_all(["locked_at = ?, locked_by = ?", db_time_now, worker.name], jobs_available_to_worker(worker.name, max_run_time).scope(:find)[:conditions], :limit => 1)
|
59
|
-
end
|
60
|
-
|
61
|
-
if affected_rows == 1
|
62
|
-
locked_by_worker(worker.name, max_run_time).first
|
63
|
-
else
|
64
|
-
nil
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
# Find a few candidate jobs to run (in case some immediately get locked by others).
|
69
|
-
def self.find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time)
|
47
|
+
|
70
48
|
::ActiveRecord::Base.silence do
|
71
|
-
|
49
|
+
scope.by_priority.all(:limit => limit)
|
72
50
|
end
|
73
51
|
end
|
74
52
|
|
data/spec/spec_helper.rb
CHANGED
@@ -20,7 +20,7 @@ Dir.glob("#{File.dirname(__FILE__)}/setup/*.rb") do |backend|
|
|
20
20
|
require "setup/#{backend}"
|
21
21
|
require "backend/#{backend}_job_spec"
|
22
22
|
BACKENDS << backend.to_sym
|
23
|
-
rescue LoadError
|
23
|
+
rescue LoadError, Exception
|
24
24
|
puts "Unable to load #{backend} backend! #{$!}"
|
25
25
|
end
|
26
26
|
end
|
metadata
CHANGED
@@ -1,169 +1,202 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 5
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 2
|
8
7
|
- 0
|
9
|
-
-
|
10
|
-
version: 2.0.
|
8
|
+
- 6
|
9
|
+
version: 2.0.6
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
12
|
+
- Chris Gaffney
|
13
13
|
- Brandon Keepers
|
14
14
|
- "Tobias L\xC3\xBCtke"
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date:
|
19
|
+
date: 2011-01-20 00:00:00 -07:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: daemons
|
24
|
-
prerelease: false
|
25
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
25
|
none: false
|
27
26
|
requirements:
|
28
27
|
- - ">="
|
29
28
|
- !ruby/object:Gem::Version
|
30
|
-
hash: 3
|
31
29
|
segments:
|
32
30
|
- 0
|
33
31
|
version: "0"
|
34
32
|
type: :runtime
|
33
|
+
prerelease: false
|
35
34
|
version_requirements: *id001
|
36
35
|
- !ruby/object:Gem::Dependency
|
37
36
|
name: rspec
|
38
|
-
prerelease: false
|
39
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
38
|
none: false
|
41
39
|
requirements:
|
42
|
-
- -
|
40
|
+
- - <
|
43
41
|
- !ruby/object:Gem::Version
|
44
|
-
hash: 3
|
45
42
|
segments:
|
43
|
+
- 2
|
46
44
|
- 0
|
47
|
-
version: "0"
|
45
|
+
version: "2.0"
|
48
46
|
type: :development
|
47
|
+
prerelease: false
|
49
48
|
version_requirements: *id002
|
50
49
|
- !ruby/object:Gem::Dependency
|
51
|
-
name:
|
52
|
-
prerelease: false
|
50
|
+
name: rake
|
53
51
|
requirement: &id003 !ruby/object:Gem::Requirement
|
54
52
|
none: false
|
55
53
|
requirements:
|
56
54
|
- - ">="
|
57
55
|
- !ruby/object:Gem::Version
|
58
|
-
hash: 3
|
59
56
|
segments:
|
60
57
|
- 0
|
61
58
|
version: "0"
|
62
59
|
type: :development
|
60
|
+
prerelease: false
|
63
61
|
version_requirements: *id003
|
64
62
|
- !ruby/object:Gem::Dependency
|
65
|
-
name:
|
66
|
-
prerelease: false
|
63
|
+
name: rails
|
67
64
|
requirement: &id004 !ruby/object:Gem::Requirement
|
68
65
|
none: false
|
69
66
|
requirements:
|
70
|
-
- -
|
67
|
+
- - <
|
71
68
|
- !ruby/object:Gem::Version
|
72
|
-
hash: 3
|
73
69
|
segments:
|
70
|
+
- 3
|
74
71
|
- 0
|
75
|
-
version: "0"
|
72
|
+
version: "3.0"
|
76
73
|
type: :development
|
74
|
+
prerelease: false
|
77
75
|
version_requirements: *id004
|
78
76
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
80
|
-
prerelease: false
|
77
|
+
name: sqlite3
|
81
78
|
requirement: &id005 !ruby/object:Gem::Requirement
|
82
79
|
none: false
|
83
80
|
requirements:
|
84
81
|
- - ">="
|
85
82
|
- !ruby/object:Gem::Version
|
86
|
-
hash: 3
|
87
83
|
segments:
|
88
84
|
- 0
|
89
85
|
version: "0"
|
90
86
|
type: :development
|
87
|
+
prerelease: false
|
91
88
|
version_requirements: *id005
|
92
89
|
- !ruby/object:Gem::Dependency
|
93
|
-
name:
|
94
|
-
prerelease: false
|
90
|
+
name: mysql
|
95
91
|
requirement: &id006 !ruby/object:Gem::Requirement
|
96
92
|
none: false
|
97
93
|
requirements:
|
98
94
|
- - ">="
|
99
95
|
- !ruby/object:Gem::Version
|
100
|
-
hash: 3
|
101
96
|
segments:
|
102
97
|
- 0
|
103
98
|
version: "0"
|
104
99
|
type: :development
|
100
|
+
prerelease: false
|
105
101
|
version_requirements: *id006
|
106
102
|
- !ruby/object:Gem::Dependency
|
107
|
-
name:
|
108
|
-
prerelease: false
|
103
|
+
name: mongo_mapper
|
109
104
|
requirement: &id007 !ruby/object:Gem::Requirement
|
110
105
|
none: false
|
111
106
|
requirements:
|
112
107
|
- - ">="
|
113
108
|
- !ruby/object:Gem::Version
|
114
|
-
hash: 3
|
115
109
|
segments:
|
116
110
|
- 0
|
117
111
|
version: "0"
|
118
112
|
type: :development
|
113
|
+
prerelease: false
|
119
114
|
version_requirements: *id007
|
120
115
|
- !ruby/object:Gem::Dependency
|
121
|
-
name: dm-
|
122
|
-
prerelease: false
|
116
|
+
name: dm-core
|
123
117
|
requirement: &id008 !ruby/object:Gem::Requirement
|
124
118
|
none: false
|
125
119
|
requirements:
|
126
120
|
- - ">="
|
127
121
|
- !ruby/object:Gem::Version
|
128
|
-
hash: 3
|
129
122
|
segments:
|
130
123
|
- 0
|
131
124
|
version: "0"
|
132
125
|
type: :development
|
126
|
+
prerelease: false
|
133
127
|
version_requirements: *id008
|
134
128
|
- !ruby/object:Gem::Dependency
|
135
|
-
name:
|
136
|
-
prerelease: false
|
129
|
+
name: dm-observer
|
137
130
|
requirement: &id009 !ruby/object:Gem::Requirement
|
138
131
|
none: false
|
139
132
|
requirements:
|
140
133
|
- - ">="
|
141
134
|
- !ruby/object:Gem::Version
|
142
|
-
hash: 3
|
143
135
|
segments:
|
144
136
|
- 0
|
145
137
|
version: "0"
|
146
138
|
type: :development
|
139
|
+
prerelease: false
|
147
140
|
version_requirements: *id009
|
148
141
|
- !ruby/object:Gem::Dependency
|
149
|
-
name:
|
150
|
-
prerelease: false
|
142
|
+
name: dm-aggregates
|
151
143
|
requirement: &id010 !ruby/object:Gem::Requirement
|
152
144
|
none: false
|
153
145
|
requirements:
|
154
146
|
- - ">="
|
155
147
|
- !ruby/object:Gem::Version
|
156
|
-
hash: 3
|
157
148
|
segments:
|
158
149
|
- 0
|
159
150
|
version: "0"
|
160
151
|
type: :development
|
152
|
+
prerelease: false
|
161
153
|
version_requirements: *id010
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: dm-validations
|
156
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
157
|
+
none: false
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
segments:
|
162
|
+
- 0
|
163
|
+
version: "0"
|
164
|
+
type: :development
|
165
|
+
prerelease: false
|
166
|
+
version_requirements: *id011
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: do_sqlite3
|
169
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
170
|
+
none: false
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
segments:
|
175
|
+
- 0
|
176
|
+
version: "0"
|
177
|
+
type: :development
|
178
|
+
prerelease: false
|
179
|
+
version_requirements: *id012
|
180
|
+
- !ruby/object:Gem::Dependency
|
181
|
+
name: database_cleaner
|
182
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
183
|
+
none: false
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
segments:
|
188
|
+
- 0
|
189
|
+
version: "0"
|
190
|
+
type: :development
|
191
|
+
prerelease: false
|
192
|
+
version_requirements: *id013
|
162
193
|
description: |-
|
163
194
|
Delayed_job (or DJ) encapsulates the common pattern of asynchronously executing longer tasks in the background. It is a direct extraction from Shopify where the job table is responsible for a multitude of core tasks.
|
164
195
|
|
165
196
|
This gem is collectiveidea's fork (http://github.com/collectiveidea/delayed_job).
|
166
|
-
email:
|
197
|
+
email:
|
198
|
+
- chris@collectiveidea.com
|
199
|
+
- brandon@opensoul.org
|
167
200
|
executables: []
|
168
201
|
|
169
202
|
extensions: []
|
@@ -171,21 +204,8 @@ extensions: []
|
|
171
204
|
extra_rdoc_files:
|
172
205
|
- README.textile
|
173
206
|
files:
|
174
|
-
- .gitignore
|
175
|
-
- .rvmrc
|
176
|
-
- CHANGELOG
|
177
|
-
- MIT-LICENSE
|
178
|
-
- README.textile
|
179
|
-
- Rakefile
|
180
|
-
- VERSION
|
181
|
-
- benchmarks.rb
|
182
207
|
- contrib/delayed_job.monitrc
|
183
208
|
- contrib/delayed_job_multiple.monitrc
|
184
|
-
- delayed_job.gemspec
|
185
|
-
- generators/delayed_job/delayed_job_generator.rb
|
186
|
-
- generators/delayed_job/templates/migration.rb
|
187
|
-
- generators/delayed_job/templates/script
|
188
|
-
- init.rb
|
189
209
|
- lib/delayed/backend/active_record.rb
|
190
210
|
- lib/delayed/backend/base.rb
|
191
211
|
- lib/delayed/backend/data_mapper.rb
|
@@ -198,7 +218,6 @@ files:
|
|
198
218
|
- lib/delayed/tasks.rb
|
199
219
|
- lib/delayed/worker.rb
|
200
220
|
- lib/delayed_job.rb
|
201
|
-
- rails/init.rb
|
202
221
|
- recipes/delayed_job.rb
|
203
222
|
- spec/backend/active_record_job_spec.rb
|
204
223
|
- spec/backend/data_mapper_job_spec.rb
|
@@ -214,7 +233,8 @@ files:
|
|
214
233
|
- spec/spec_helper.rb
|
215
234
|
- spec/story_spec.rb
|
216
235
|
- spec/worker_spec.rb
|
217
|
-
-
|
236
|
+
- MIT-LICENSE
|
237
|
+
- README.textile
|
218
238
|
has_rdoc: true
|
219
239
|
homepage: http://github.com/collectiveidea/delayed_job
|
220
240
|
licenses: []
|
@@ -232,7 +252,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
232
252
|
requirements:
|
233
253
|
- - ">="
|
234
254
|
- !ruby/object:Gem::Version
|
235
|
-
hash:
|
255
|
+
hash: 3581009540733593497
|
236
256
|
segments:
|
237
257
|
- 0
|
238
258
|
version: "0"
|
@@ -241,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
241
261
|
requirements:
|
242
262
|
- - ">="
|
243
263
|
- !ruby/object:Gem::Version
|
244
|
-
hash:
|
264
|
+
hash: 3581009540733593497
|
245
265
|
segments:
|
246
266
|
- 0
|
247
267
|
version: "0"
|
@@ -253,8 +273,17 @@ signing_key:
|
|
253
273
|
specification_version: 3
|
254
274
|
summary: Database-backed asynchronous priority queue system -- Extracted from Shopify
|
255
275
|
test_files:
|
276
|
+
- spec/backend/active_record_job_spec.rb
|
277
|
+
- spec/backend/data_mapper_job_spec.rb
|
278
|
+
- spec/backend/mongo_mapper_job_spec.rb
|
279
|
+
- spec/backend/shared_backend_spec.rb
|
256
280
|
- spec/delayed_method_spec.rb
|
257
281
|
- spec/message_sending_spec.rb
|
258
282
|
- spec/performable_method_spec.rb
|
283
|
+
- spec/sample_jobs.rb
|
284
|
+
- spec/setup/active_record.rb
|
285
|
+
- spec/setup/data_mapper.rb
|
286
|
+
- spec/setup/mongo_mapper.rb
|
287
|
+
- spec/spec_helper.rb
|
259
288
|
- spec/story_spec.rb
|
260
289
|
- spec/worker_spec.rb
|
data/.gitignore
DELETED
data/CHANGELOG
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
2.0.5 - 2010-12-01
|
2
|
-
* Added #reschedule_at hook on payload to determine when the job should be rescheduled [backported from 2.1]
|
3
|
-
* Added --sleep-delay command line option [backported from 2.1]
|
4
|
-
* Added 'delayed_job_server_role' Capistrano variable to allow delayed_job to run on its own worker server
|
5
|
-
set :delayed_job_server_role, :worker
|
6
|
-
* Changed AR backend to reserve jobs using an UPDATE query to reduce worker contention [backported from 2.1]
|
7
|
-
|
8
|
-
2.0.4 - 2010-11-14
|
9
|
-
* Fix issue where dirty tracking prevented job from being properly unlocked
|
10
|
-
* Add delayed_job_args variable for Capistrano recipe to allow configuration of started workers (e.g. "-n 2 --max-priority 10")
|
11
|
-
* Added options to handle_asynchronously
|
12
|
-
* Added Delayed::Worker.default_priority
|
13
|
-
* Allow private methods to be delayed
|
14
|
-
* Fixes for Ruby 1.9
|
15
|
-
* Added -m command line option to start a monitor process
|
16
|
-
* normalize logging in worker
|
17
|
-
* Deprecate #send_later and #send_at in favor of new #delay method
|
18
|
-
* Added @#delay@ to Object that allows you to delay any method and pass options:
|
19
|
-
options = {:priority => 19, :run_at => 5.minutes.from_now}
|
20
|
-
UserMailer.delay(options).deliver_confirmation(@user)
|
21
|
-
|
22
|
-
2.0.3 - 2010-04-16
|
23
|
-
|
24
|
-
* Fix initialization for Rails 2.x
|
25
|
-
|
26
|
-
2.0.2 - 2010-04-08
|
27
|
-
|
28
|
-
* Fixes to Mongo Mapper backend [ "14be7a24":http://github.com/collectiveidea/delayed_job/commit/14be7a24, "dafd5f46":http://github.com/collectiveidea/delayed_job/commit/dafd5f46, "54d40913":http://github.com/collectiveidea/delayed_job/commit/54d40913 ]
|
29
|
-
* DataMapper backend performance improvements [ "93833cce":http://github.com/collectiveidea/delayed_job/commit/93833cce, "e9b1573e":http://github.com/collectiveidea/delayed_job/commit/e9b1573e, "37a16d11":http://github.com/collectiveidea/delayed_job/commit/37a16d11, "803f2bfa":http://github.com/collectiveidea/delayed_job/commit/803f2bfa ]
|
30
|
-
* Fixed Delayed::Command to create tmp/pids directory [ "8ec8ca41":http://github.com/collectiveidea/delayed_job/commit/8ec8ca41 ]
|
31
|
-
* Railtie to perform Rails 3 initialization [ "3e0fc41f":http://github.com/collectiveidea/delayed_job/commit/3e0fc41f ]
|
32
|
-
* Added on_permanent_failure hook [ "d2f14cd6":http://github.com/collectiveidea/delayed_job/commit/d2f14cd6 ]
|
33
|
-
|
34
|
-
2.0.1 - 2010-04-03
|
35
|
-
* Bug fix for using ActiveRecord backend with daemon [martinbtt]
|
36
|
-
|
37
|
-
2.0.0 - 2010-04-03
|
38
|
-
* Multiple backend support (See README for more details)
|
39
|
-
* Added MongoMapper backend [zbelzer, moneypools]
|
40
|
-
* Added DataMapper backend [lpetre]
|
41
|
-
* Reverse priority so the jobs table can be indexed. Lower numbers have higher priority. The default priority is 0, so increase it for jobs that are not important.
|
42
|
-
* Move most of the heavy lifting from Job to Worker (#work_off, #reschedule, #run, #min_priority, #max_priority, #max_run_time, #max_attempts, #worker_name) [albus522]
|
43
|
-
* Remove EvaledJob. Implement your own if you need this functionality.
|
44
|
-
* Only use Time.zone if it is set. Closes #20
|
45
|
-
* Fix for last_error recording when destroy_failed_jobs = false, max_attempts = 1
|
46
|
-
* Implemented worker name_prefix to maintain dynamic nature of pid detection
|
47
|
-
* Some Rails 3 compatibility fixes [fredwu]
|
48
|
-
|
49
|
-
1.8.5 - 2010-03-15
|
50
|
-
|
51
|
-
* Set auto_flushing=true on Rails logger to fix logging in production
|
52
|
-
* Fix error message when trying to send_later on a method that doesn't exist
|
53
|
-
* Don't use rails_env in capistrano if it's not set. closes #22
|
54
|
-
* Delayed job should append to delayed_job.log not overwrite
|
55
|
-
* Version bump to 1.8.5
|
56
|
-
* fixing Time.now to be Time.zone.now if set to honor the app set local TimeZone
|
57
|
-
* Replaced @Worker::SLEEP@, @Job::MAX_ATTEMPTS@, and @Job::MAX_RUN_TIME@ with class methods that can be overridden.
|
data/Rakefile
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
begin
|
3
|
-
require 'jeweler'
|
4
|
-
rescue LoadError
|
5
|
-
puts "Jeweler not available. Install it with: sudo gem install jeweler"
|
6
|
-
exit 1
|
7
|
-
end
|
8
|
-
|
9
|
-
Jeweler::Tasks.new do |s|
|
10
|
-
s.name = "delayed_job"
|
11
|
-
s.summary = "Database-backed asynchronous priority queue system -- Extracted from Shopify"
|
12
|
-
s.email = "tobi@leetsoft.com"
|
13
|
-
s.homepage = "http://github.com/collectiveidea/delayed_job"
|
14
|
-
s.description = "Delayed_job (or DJ) encapsulates the common pattern of asynchronously executing longer tasks in the background. It is a direct extraction from Shopify where the job table is responsible for a multitude of core tasks.\n\nThis gem is collectiveidea's fork (http://github.com/collectiveidea/delayed_job)."
|
15
|
-
s.authors = ["Brandon Keepers", "Tobias Lütke"]
|
16
|
-
|
17
|
-
s.has_rdoc = true
|
18
|
-
s.rdoc_options = ["--main", "README.textile", "--inline-source", "--line-numbers"]
|
19
|
-
s.extra_rdoc_files = ["README.textile"]
|
20
|
-
|
21
|
-
s.test_files = Dir['spec/*_spec.rb']
|
22
|
-
|
23
|
-
s.add_dependency "daemons"
|
24
|
-
s.add_development_dependency "rspec"
|
25
|
-
s.add_development_dependency "sqlite3-ruby"
|
26
|
-
s.add_development_dependency "mongo_mapper"
|
27
|
-
s.add_development_dependency "dm-core"
|
28
|
-
s.add_development_dependency "dm-observer"
|
29
|
-
s.add_development_dependency "dm-aggregates"
|
30
|
-
s.add_development_dependency "dm-validations"
|
31
|
-
s.add_development_dependency "do_sqlite3"
|
32
|
-
s.add_development_dependency "database_cleaner"
|
33
|
-
end
|
34
|
-
|
35
|
-
require 'spec/rake/spectask'
|
36
|
-
desc 'Run the specs'
|
37
|
-
Spec::Rake::SpecTask.new(:spec) do |t|
|
38
|
-
t.libs << 'lib'
|
39
|
-
t.pattern = 'spec/*_spec.rb'
|
40
|
-
t.verbose = false
|
41
|
-
end
|
42
|
-
|
43
|
-
task :spec => :check_dependencies
|
44
|
-
task :default => :spec
|
45
|
-
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.0.5
|
data/benchmarks.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
$:.unshift(File.dirname(__FILE__) + '/lib')
|
2
|
-
require 'rubygems'
|
3
|
-
require 'logger'
|
4
|
-
require 'delayed_job'
|
5
|
-
require 'benchmark'
|
6
|
-
|
7
|
-
RAILS_ENV = 'test'
|
8
|
-
|
9
|
-
Delayed::Worker.logger = Logger.new('/dev/null')
|
10
|
-
|
11
|
-
BACKENDS = []
|
12
|
-
Dir.glob("#{File.dirname(__FILE__)}/spec/setup/*.rb") do |backend|
|
13
|
-
begin
|
14
|
-
backend = File.basename(backend, '.rb')
|
15
|
-
require "spec/setup/#{backend}"
|
16
|
-
BACKENDS << backend.to_sym
|
17
|
-
rescue LoadError
|
18
|
-
puts "Unable to load #{backend} backend! #{$!}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
Benchmark.bm(10) do |x|
|
24
|
-
BACKENDS.each do |backend|
|
25
|
-
require "spec/setup/#{backend}"
|
26
|
-
Delayed::Worker.backend = backend
|
27
|
-
|
28
|
-
n = 10000
|
29
|
-
n.times { "foo".delay.length }
|
30
|
-
|
31
|
-
x.report(backend.to_s) { Delayed::Worker.new(:quiet => true).work_off(n) }
|
32
|
-
end
|
33
|
-
end
|
data/delayed_job.gemspec
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{delayed_job}
|
8
|
-
s.version = "2.0.5"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Brandon Keepers", "Tobias L\303\274tke"]
|
12
|
-
s.date = %q{2010-12-01}
|
13
|
-
s.description = %q{Delayed_job (or DJ) encapsulates the common pattern of asynchronously executing longer tasks in the background. It is a direct extraction from Shopify where the job table is responsible for a multitude of core tasks.
|
14
|
-
|
15
|
-
This gem is collectiveidea's fork (http://github.com/collectiveidea/delayed_job).}
|
16
|
-
s.email = %q{tobi@leetsoft.com}
|
17
|
-
s.extra_rdoc_files = [
|
18
|
-
"README.textile"
|
19
|
-
]
|
20
|
-
s.files = [
|
21
|
-
".gitignore",
|
22
|
-
".rvmrc",
|
23
|
-
"CHANGELOG",
|
24
|
-
"MIT-LICENSE",
|
25
|
-
"README.textile",
|
26
|
-
"Rakefile",
|
27
|
-
"VERSION",
|
28
|
-
"benchmarks.rb",
|
29
|
-
"contrib/delayed_job.monitrc",
|
30
|
-
"contrib/delayed_job_multiple.monitrc",
|
31
|
-
"delayed_job.gemspec",
|
32
|
-
"generators/delayed_job/delayed_job_generator.rb",
|
33
|
-
"generators/delayed_job/templates/migration.rb",
|
34
|
-
"generators/delayed_job/templates/script",
|
35
|
-
"init.rb",
|
36
|
-
"lib/delayed/backend/active_record.rb",
|
37
|
-
"lib/delayed/backend/base.rb",
|
38
|
-
"lib/delayed/backend/data_mapper.rb",
|
39
|
-
"lib/delayed/backend/mongo_mapper.rb",
|
40
|
-
"lib/delayed/command.rb",
|
41
|
-
"lib/delayed/message_sending.rb",
|
42
|
-
"lib/delayed/performable_method.rb",
|
43
|
-
"lib/delayed/railtie.rb",
|
44
|
-
"lib/delayed/recipes.rb",
|
45
|
-
"lib/delayed/tasks.rb",
|
46
|
-
"lib/delayed/worker.rb",
|
47
|
-
"lib/delayed_job.rb",
|
48
|
-
"rails/init.rb",
|
49
|
-
"recipes/delayed_job.rb",
|
50
|
-
"spec/backend/active_record_job_spec.rb",
|
51
|
-
"spec/backend/data_mapper_job_spec.rb",
|
52
|
-
"spec/backend/mongo_mapper_job_spec.rb",
|
53
|
-
"spec/backend/shared_backend_spec.rb",
|
54
|
-
"spec/delayed_method_spec.rb",
|
55
|
-
"spec/message_sending_spec.rb",
|
56
|
-
"spec/performable_method_spec.rb",
|
57
|
-
"spec/sample_jobs.rb",
|
58
|
-
"spec/setup/active_record.rb",
|
59
|
-
"spec/setup/data_mapper.rb",
|
60
|
-
"spec/setup/mongo_mapper.rb",
|
61
|
-
"spec/spec_helper.rb",
|
62
|
-
"spec/story_spec.rb",
|
63
|
-
"spec/worker_spec.rb",
|
64
|
-
"tasks/jobs.rake"
|
65
|
-
]
|
66
|
-
s.homepage = %q{http://github.com/collectiveidea/delayed_job}
|
67
|
-
s.rdoc_options = ["--main", "README.textile", "--inline-source", "--line-numbers"]
|
68
|
-
s.require_paths = ["lib"]
|
69
|
-
s.rubygems_version = %q{1.3.7}
|
70
|
-
s.summary = %q{Database-backed asynchronous priority queue system -- Extracted from Shopify}
|
71
|
-
s.test_files = [
|
72
|
-
"spec/delayed_method_spec.rb",
|
73
|
-
"spec/message_sending_spec.rb",
|
74
|
-
"spec/performable_method_spec.rb",
|
75
|
-
"spec/story_spec.rb",
|
76
|
-
"spec/worker_spec.rb"
|
77
|
-
]
|
78
|
-
|
79
|
-
if s.respond_to? :specification_version then
|
80
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
81
|
-
s.specification_version = 3
|
82
|
-
|
83
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
84
|
-
s.add_runtime_dependency(%q<daemons>, [">= 0"])
|
85
|
-
s.add_development_dependency(%q<rspec>, [">= 0"])
|
86
|
-
s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
|
87
|
-
s.add_development_dependency(%q<mongo_mapper>, [">= 0"])
|
88
|
-
s.add_development_dependency(%q<dm-core>, [">= 0"])
|
89
|
-
s.add_development_dependency(%q<dm-observer>, [">= 0"])
|
90
|
-
s.add_development_dependency(%q<dm-aggregates>, [">= 0"])
|
91
|
-
s.add_development_dependency(%q<dm-validations>, [">= 0"])
|
92
|
-
s.add_development_dependency(%q<do_sqlite3>, [">= 0"])
|
93
|
-
s.add_development_dependency(%q<database_cleaner>, [">= 0"])
|
94
|
-
else
|
95
|
-
s.add_dependency(%q<daemons>, [">= 0"])
|
96
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
97
|
-
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
|
98
|
-
s.add_dependency(%q<mongo_mapper>, [">= 0"])
|
99
|
-
s.add_dependency(%q<dm-core>, [">= 0"])
|
100
|
-
s.add_dependency(%q<dm-observer>, [">= 0"])
|
101
|
-
s.add_dependency(%q<dm-aggregates>, [">= 0"])
|
102
|
-
s.add_dependency(%q<dm-validations>, [">= 0"])
|
103
|
-
s.add_dependency(%q<do_sqlite3>, [">= 0"])
|
104
|
-
s.add_dependency(%q<database_cleaner>, [">= 0"])
|
105
|
-
end
|
106
|
-
else
|
107
|
-
s.add_dependency(%q<daemons>, [">= 0"])
|
108
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
109
|
-
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
|
110
|
-
s.add_dependency(%q<mongo_mapper>, [">= 0"])
|
111
|
-
s.add_dependency(%q<dm-core>, [">= 0"])
|
112
|
-
s.add_dependency(%q<dm-observer>, [">= 0"])
|
113
|
-
s.add_dependency(%q<dm-aggregates>, [">= 0"])
|
114
|
-
s.add_dependency(%q<dm-validations>, [">= 0"])
|
115
|
-
s.add_dependency(%q<do_sqlite3>, [">= 0"])
|
116
|
-
s.add_dependency(%q<database_cleaner>, [">= 0"])
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
@@ -1,22 +0,0 @@
|
|
1
|
-
class DelayedJobGenerator < Rails::Generator::Base
|
2
|
-
default_options :skip_migration => false
|
3
|
-
|
4
|
-
def manifest
|
5
|
-
record do |m|
|
6
|
-
m.template 'script', 'script/delayed_job', :chmod => 0755
|
7
|
-
if !options[:skip_migration] && defined?(ActiveRecord)
|
8
|
-
m.migration_template "migration.rb", 'db/migrate',
|
9
|
-
:migration_file_name => "create_delayed_jobs"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
protected
|
15
|
-
|
16
|
-
def add_options!(opt)
|
17
|
-
opt.separator ''
|
18
|
-
opt.separator 'Options:'
|
19
|
-
opt.on("--skip-migration", "Don't generate a migration") { |v| options[:skip_migration] = v }
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
class CreateDelayedJobs < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
create_table :delayed_jobs, :force => true do |table|
|
4
|
-
table.integer :priority, :default => 0 # Allows some jobs to jump to the front of the queue
|
5
|
-
table.integer :attempts, :default => 0 # Provides for retries, but still fail eventually.
|
6
|
-
table.text :handler # YAML-encoded string of the object that will do work
|
7
|
-
table.text :last_error # reason for last failure (See Note below)
|
8
|
-
table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
|
9
|
-
table.datetime :locked_at # Set when a client is working on this object
|
10
|
-
table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
|
11
|
-
table.string :locked_by # Who is working on this object (if locked)
|
12
|
-
table.timestamps
|
13
|
-
end
|
14
|
-
|
15
|
-
add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
|
16
|
-
add_index :delayed_jobs, :locked_by, :name => 'delayed_jobs_locked_by'
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.down
|
20
|
-
drop_table :delayed_jobs
|
21
|
-
end
|
22
|
-
end
|
data/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'rails', 'init')
|
data/rails/init.rb
DELETED
data/tasks/jobs.rake
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'delayed', 'tasks'))
|