delayed_job 1.8.3 → 1.8.4
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/VERSION +1 -1
- data/delayed_job.gemspec +2 -2
- data/lib/delayed/command.rb +1 -1
- data/lib/delayed/job.rb +1 -2
- data/lib/delayed/message_sending.rb +4 -0
- data/spec/delayed_method_spec.rb +22 -0
- data/spec/job_spec.rb +39 -22
- metadata +2 -2
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.8.
|
|
1
|
+
1.8.4
|
data/delayed_job.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{delayed_job}
|
|
8
|
-
s.version = "1.8.
|
|
8
|
+
s.version = "1.8.4"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Brandon Keepers", "Tobias L\303\274tke"]
|
|
12
|
-
s.date = %q{2009-
|
|
12
|
+
s.date = %q{2009-10-06}
|
|
13
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
14
|
s.email = %q{tobi@leetsoft.com}
|
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/delayed/command.rb
CHANGED
data/lib/delayed/job.rb
CHANGED
|
@@ -65,10 +65,9 @@ module Delayed
|
|
|
65
65
|
# Reschedule the job in the future (when a job fails).
|
|
66
66
|
# Uses an exponential scale depending on the number of failed attempts.
|
|
67
67
|
def reschedule(message, backtrace = [], time = nil)
|
|
68
|
-
if self.attempts < MAX_ATTEMPTS
|
|
68
|
+
if (self.attempts += 1) < MAX_ATTEMPTS
|
|
69
69
|
time ||= Job.db_time_now + (attempts ** 4) + 5
|
|
70
70
|
|
|
71
|
-
self.attempts += 1
|
|
72
71
|
self.run_at = time
|
|
73
72
|
self.last_error = message + "\n" + backtrace.join("\n")
|
|
74
73
|
self.unlock
|
|
@@ -3,6 +3,10 @@ module Delayed
|
|
|
3
3
|
def send_later(method, *args)
|
|
4
4
|
Delayed::Job.enqueue Delayed::PerformableMethod.new(self, method.to_sym, args)
|
|
5
5
|
end
|
|
6
|
+
|
|
7
|
+
def send_at(time, method, *args)
|
|
8
|
+
Delayed::Job.enqueue(Delayed::PerformableMethod.new(self, method.to_sym, args), 0, time)
|
|
9
|
+
end
|
|
6
10
|
|
|
7
11
|
module ClassMethods
|
|
8
12
|
def handle_asynchronously(method)
|
data/spec/delayed_method_spec.rb
CHANGED
|
@@ -125,4 +125,26 @@ describe 'random ruby objects' do
|
|
|
125
125
|
job.payload_object.perform.should == 'Once upon...'
|
|
126
126
|
end
|
|
127
127
|
|
|
128
|
+
context "send_at" do
|
|
129
|
+
it "should queue a new job" do
|
|
130
|
+
lambda do
|
|
131
|
+
"string".send_at(1.hour.from_now, :length)
|
|
132
|
+
end.should change { Delayed::Job.count }.by(1)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "should schedule the job in the future" do
|
|
136
|
+
time = 1.hour.from_now
|
|
137
|
+
job = "string".send_at(time, :length)
|
|
138
|
+
job.run_at.should == time
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it "should store payload as PerformableMethod" do
|
|
142
|
+
job = "string".send_at(1.hour.from_now, :count, 'r')
|
|
143
|
+
job.payload_object.class.should == Delayed::PerformableMethod
|
|
144
|
+
job.payload_object.method.should == :count
|
|
145
|
+
job.payload_object.args.should == ['r']
|
|
146
|
+
job.payload_object.perform.should == 1
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
128
150
|
end
|
data/spec/job_spec.rb
CHANGED
|
@@ -152,29 +152,46 @@ describe Delayed::Job do
|
|
|
152
152
|
lambda { job.payload_object.perform }.should raise_error(Delayed::DeserializationError)
|
|
153
153
|
end
|
|
154
154
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
155
|
+
context "reschedule" do
|
|
156
|
+
before do
|
|
157
|
+
@job = Delayed::Job.create :payload_object => SimpleJob.new
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
context "and we want to destroy jobs" do
|
|
161
|
+
before do
|
|
162
|
+
Delayed::Job.destroy_failed_jobs = true
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it "should be destroyed if it failed more than MAX_ATTEMPTS times" do
|
|
166
|
+
@job.should_receive(:destroy)
|
|
167
|
+
Delayed::Job::MAX_ATTEMPTS.times { @job.reschedule 'FAIL' }
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it "should not be destroyed if failed fewer than MAX_ATTEMPTS times" do
|
|
171
|
+
@job.should_not_receive(:destroy)
|
|
172
|
+
(Delayed::Job::MAX_ATTEMPTS - 1).times { @job.reschedule 'FAIL' }
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
context "and we don't want to destroy jobs" do
|
|
177
|
+
before do
|
|
178
|
+
Delayed::Job.destroy_failed_jobs = false
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "should be failed if it failed more than MAX_ATTEMPTS times" do
|
|
182
|
+
@job.reload.failed_at.should == nil
|
|
183
|
+
Delayed::Job::MAX_ATTEMPTS.times { @job.reschedule 'FAIL' }
|
|
184
|
+
@job.reload.failed_at.should_not == nil
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it "should not be failed if it failed fewer than MAX_ATTEMPTS times" do
|
|
188
|
+
(Delayed::Job::MAX_ATTEMPTS - 1).times { @job.reschedule 'FAIL' }
|
|
189
|
+
@job.reload.failed_at.should == nil
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
end
|
|
176
193
|
end
|
|
177
|
-
|
|
194
|
+
|
|
178
195
|
it "should fail after MAX_RUN_TIME" do
|
|
179
196
|
@job = Delayed::Job.create :payload_object => LongRunningJob.new
|
|
180
197
|
Delayed::Job.reserve_and_run_one_job(1.second)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: delayed_job
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.8.
|
|
4
|
+
version: 1.8.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brandon Keepers
|
|
@@ -10,7 +10,7 @@ autorequire:
|
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
12
|
|
|
13
|
-
date: 2009-
|
|
13
|
+
date: 2009-10-06 00:00:00 -04:00
|
|
14
14
|
default_executable:
|
|
15
15
|
dependencies: []
|
|
16
16
|
|