steini-resque 1.18.5
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.md +322 -0
- data/LICENSE +20 -0
- data/README.markdown +881 -0
- data/Rakefile +78 -0
- data/bin/resque +81 -0
- data/bin/resque-web +23 -0
- data/lib/resque.rb +352 -0
- data/lib/resque/errors.rb +10 -0
- data/lib/resque/failure.rb +70 -0
- data/lib/resque/failure/base.rb +64 -0
- data/lib/resque/failure/hoptoad.rb +48 -0
- data/lib/resque/failure/multiple.rb +54 -0
- data/lib/resque/failure/redis.rb +51 -0
- data/lib/resque/helpers.rb +63 -0
- data/lib/resque/job.rb +205 -0
- data/lib/resque/plugin.rb +56 -0
- data/lib/resque/server.rb +231 -0
- data/lib/resque/server/public/favicon.ico +0 -0
- data/lib/resque/server/public/idle.png +0 -0
- data/lib/resque/server/public/jquery-1.3.2.min.js +19 -0
- data/lib/resque/server/public/jquery.relatize_date.js +95 -0
- data/lib/resque/server/public/poll.png +0 -0
- data/lib/resque/server/public/ranger.js +73 -0
- data/lib/resque/server/public/reset.css +48 -0
- data/lib/resque/server/public/style.css +85 -0
- data/lib/resque/server/public/working.png +0 -0
- data/lib/resque/server/test_helper.rb +19 -0
- data/lib/resque/server/views/error.erb +1 -0
- data/lib/resque/server/views/failed.erb +64 -0
- data/lib/resque/server/views/key_sets.erb +19 -0
- data/lib/resque/server/views/key_string.erb +11 -0
- data/lib/resque/server/views/layout.erb +44 -0
- data/lib/resque/server/views/next_more.erb +10 -0
- data/lib/resque/server/views/overview.erb +4 -0
- data/lib/resque/server/views/queues.erb +49 -0
- data/lib/resque/server/views/stats.erb +62 -0
- data/lib/resque/server/views/workers.erb +109 -0
- data/lib/resque/server/views/working.erb +72 -0
- data/lib/resque/stat.rb +53 -0
- data/lib/resque/tasks.rb +51 -0
- data/lib/resque/version.rb +3 -0
- data/lib/resque/worker.rb +533 -0
- data/lib/tasks/redis.rake +161 -0
- data/lib/tasks/resque.rake +2 -0
- data/test/hoptoad_test.rb +25 -0
- data/test/job_hooks_test.rb +363 -0
- data/test/job_plugins_test.rb +230 -0
- data/test/plugin_test.rb +116 -0
- data/test/redis-test.conf +115 -0
- data/test/resque-web_test.rb +53 -0
- data/test/resque_test.rb +259 -0
- data/test/test_helper.rb +148 -0
- data/test/worker_test.rb +332 -0
- metadata +183 -0
data/test/worker_test.rb
ADDED
@@ -0,0 +1,332 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
context "Resque::Worker" do
|
4
|
+
setup do
|
5
|
+
Resque.redis.flushall
|
6
|
+
|
7
|
+
Resque.before_first_fork = nil
|
8
|
+
Resque.before_fork = nil
|
9
|
+
Resque.after_fork = nil
|
10
|
+
|
11
|
+
@worker = Resque::Worker.new(:jobs)
|
12
|
+
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
13
|
+
end
|
14
|
+
|
15
|
+
test "can fail jobs" do
|
16
|
+
Resque::Job.create(:jobs, BadJob)
|
17
|
+
@worker.work(0)
|
18
|
+
assert_equal 1, Resque::Failure.count
|
19
|
+
end
|
20
|
+
|
21
|
+
test "failed jobs report exception and message" do
|
22
|
+
Resque::Job.create(:jobs, BadJobWithSyntaxError)
|
23
|
+
@worker.work(0)
|
24
|
+
assert_equal('SyntaxError', Resque::Failure.all['exception'])
|
25
|
+
assert_equal('Extra Bad job!', Resque::Failure.all['error'])
|
26
|
+
end
|
27
|
+
|
28
|
+
test "does not allow exceptions from failure backend to escape" do
|
29
|
+
job = Resque::Job.new(:jobs, {})
|
30
|
+
with_failure_backend BadFailureBackend do
|
31
|
+
@worker.perform job
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
test "fails uncompleted jobs on exit" do
|
36
|
+
job = Resque::Job.new(:jobs, [GoodJob, "blah"])
|
37
|
+
@worker.working_on(job)
|
38
|
+
@worker.unregister_worker
|
39
|
+
assert_equal 1, Resque::Failure.count
|
40
|
+
end
|
41
|
+
|
42
|
+
test "can peek at failed jobs" do
|
43
|
+
10.times { Resque::Job.create(:jobs, BadJob) }
|
44
|
+
@worker.work(0)
|
45
|
+
assert_equal 10, Resque::Failure.count
|
46
|
+
|
47
|
+
assert_equal 10, Resque::Failure.all(0, 20).size
|
48
|
+
end
|
49
|
+
|
50
|
+
test "can clear failed jobs" do
|
51
|
+
Resque::Job.create(:jobs, BadJob)
|
52
|
+
@worker.work(0)
|
53
|
+
assert_equal 1, Resque::Failure.count
|
54
|
+
Resque::Failure.clear
|
55
|
+
assert_equal 0, Resque::Failure.count
|
56
|
+
end
|
57
|
+
|
58
|
+
test "catches exceptional jobs" do
|
59
|
+
Resque::Job.create(:jobs, BadJob)
|
60
|
+
Resque::Job.create(:jobs, BadJob)
|
61
|
+
@worker.process
|
62
|
+
@worker.process
|
63
|
+
@worker.process
|
64
|
+
assert_equal 2, Resque::Failure.count
|
65
|
+
end
|
66
|
+
|
67
|
+
test "strips whitespace from queue names" do
|
68
|
+
queues = "critical, high, low".split(',')
|
69
|
+
worker = Resque::Worker.new(*queues)
|
70
|
+
assert_equal %w( critical high low ), worker.queues
|
71
|
+
end
|
72
|
+
|
73
|
+
test "can work on multiple queues" do
|
74
|
+
Resque::Job.create(:high, GoodJob)
|
75
|
+
Resque::Job.create(:critical, GoodJob)
|
76
|
+
|
77
|
+
worker = Resque::Worker.new(:critical, :high)
|
78
|
+
|
79
|
+
worker.process
|
80
|
+
assert_equal 1, Resque.size(:high)
|
81
|
+
assert_equal 0, Resque.size(:critical)
|
82
|
+
|
83
|
+
worker.process
|
84
|
+
assert_equal 0, Resque.size(:high)
|
85
|
+
end
|
86
|
+
|
87
|
+
test "can work on all queues" do
|
88
|
+
Resque::Job.create(:high, GoodJob)
|
89
|
+
Resque::Job.create(:critical, GoodJob)
|
90
|
+
Resque::Job.create(:blahblah, GoodJob)
|
91
|
+
|
92
|
+
worker = Resque::Worker.new("*")
|
93
|
+
|
94
|
+
worker.work(0)
|
95
|
+
assert_equal 0, Resque.size(:high)
|
96
|
+
assert_equal 0, Resque.size(:critical)
|
97
|
+
assert_equal 0, Resque.size(:blahblah)
|
98
|
+
end
|
99
|
+
|
100
|
+
test "processes * queues in alphabetical order" do
|
101
|
+
Resque::Job.create(:high, GoodJob)
|
102
|
+
Resque::Job.create(:critical, GoodJob)
|
103
|
+
Resque::Job.create(:blahblah, GoodJob)
|
104
|
+
|
105
|
+
worker = Resque::Worker.new("*")
|
106
|
+
processed_queues = []
|
107
|
+
|
108
|
+
worker.work(0) do |job|
|
109
|
+
processed_queues << job.queue
|
110
|
+
end
|
111
|
+
|
112
|
+
assert_equal %w( jobs high critical blahblah ).sort, processed_queues
|
113
|
+
end
|
114
|
+
|
115
|
+
test "has a unique id" do
|
116
|
+
assert_equal "#{`hostname`.chomp}:#{$$}:jobs", @worker.to_s
|
117
|
+
end
|
118
|
+
|
119
|
+
test "complains if no queues are given" do
|
120
|
+
assert_raise Resque::NoQueueError do
|
121
|
+
Resque::Worker.new
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
test "fails if a job class has no `perform` method" do
|
126
|
+
worker = Resque::Worker.new(:perform_less)
|
127
|
+
Resque::Job.create(:perform_less, Object)
|
128
|
+
|
129
|
+
assert_equal 0, Resque::Failure.count
|
130
|
+
worker.work(0)
|
131
|
+
assert_equal 1, Resque::Failure.count
|
132
|
+
end
|
133
|
+
|
134
|
+
test "inserts itself into the 'workers' list on startup" do
|
135
|
+
@worker.work(0) do
|
136
|
+
assert_equal @worker, Resque.workers[0]
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
test "removes itself from the 'workers' list on shutdown" do
|
141
|
+
@worker.work(0) do
|
142
|
+
assert_equal @worker, Resque.workers[0]
|
143
|
+
end
|
144
|
+
|
145
|
+
assert_equal [], Resque.workers
|
146
|
+
end
|
147
|
+
|
148
|
+
test "removes worker with stringified id" do
|
149
|
+
@worker.work(0) do
|
150
|
+
worker_id = Resque.workers[0].to_s
|
151
|
+
Resque.remove_worker(worker_id)
|
152
|
+
assert_equal [], Resque.workers
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
test "records what it is working on" do
|
157
|
+
@worker.work(0) do
|
158
|
+
task = @worker.job
|
159
|
+
assert_equal({"args"=>[20, "/tmp"], "class"=>"SomeJob"}, task['payload'])
|
160
|
+
assert task['run_at']
|
161
|
+
assert_equal 'jobs', task['queue']
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
test "clears its status when not working on anything" do
|
166
|
+
@worker.work(0)
|
167
|
+
assert_equal Hash.new, @worker.job
|
168
|
+
end
|
169
|
+
|
170
|
+
test "knows when it is working" do
|
171
|
+
@worker.work(0) do
|
172
|
+
assert @worker.working?
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
test "knows when it is idle" do
|
177
|
+
@worker.work(0)
|
178
|
+
assert @worker.idle?
|
179
|
+
end
|
180
|
+
|
181
|
+
test "knows who is working" do
|
182
|
+
@worker.work(0) do
|
183
|
+
assert_equal [@worker], Resque.working
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
test "keeps track of how many jobs it has processed" do
|
188
|
+
Resque::Job.create(:jobs, BadJob)
|
189
|
+
Resque::Job.create(:jobs, BadJob)
|
190
|
+
|
191
|
+
3.times do
|
192
|
+
job = @worker.reserve
|
193
|
+
@worker.process job
|
194
|
+
end
|
195
|
+
assert_equal 3, @worker.processed
|
196
|
+
end
|
197
|
+
|
198
|
+
test "keeps track of how many failures it has seen" do
|
199
|
+
Resque::Job.create(:jobs, BadJob)
|
200
|
+
Resque::Job.create(:jobs, BadJob)
|
201
|
+
|
202
|
+
3.times do
|
203
|
+
job = @worker.reserve
|
204
|
+
@worker.process job
|
205
|
+
end
|
206
|
+
assert_equal 2, @worker.failed
|
207
|
+
end
|
208
|
+
|
209
|
+
test "stats are erased when the worker goes away" do
|
210
|
+
@worker.work(0)
|
211
|
+
assert_equal 0, @worker.processed
|
212
|
+
assert_equal 0, @worker.failed
|
213
|
+
end
|
214
|
+
|
215
|
+
test "knows when it started" do
|
216
|
+
time = Time.now
|
217
|
+
@worker.work(0) do
|
218
|
+
assert_equal time.to_s, @worker.started.to_s
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
test "knows whether it exists or not" do
|
223
|
+
@worker.work(0) do
|
224
|
+
assert Resque::Worker.exists?(@worker)
|
225
|
+
assert !Resque::Worker.exists?('blah-blah')
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
test "sets $0 while working" do
|
230
|
+
@worker.work(0) do
|
231
|
+
ver = Resque::Version
|
232
|
+
assert_equal "resque-#{ver}: Processing jobs since #{Time.now.to_i}", $0
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
test "can be found" do
|
237
|
+
@worker.work(0) do
|
238
|
+
found = Resque::Worker.find(@worker.to_s)
|
239
|
+
assert_equal @worker.to_s, found.to_s
|
240
|
+
assert found.working?
|
241
|
+
assert_equal @worker.job, found.job
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
test "doesn't find fakes" do
|
246
|
+
@worker.work(0) do
|
247
|
+
found = Resque::Worker.find('blah-blah')
|
248
|
+
assert_equal nil, found
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
test "cleans up dead worker info on start (crash recovery)" do
|
253
|
+
# first we fake out two dead workers
|
254
|
+
workerA = Resque::Worker.new(:jobs)
|
255
|
+
workerA.instance_variable_set(:@to_s, "#{`hostname`.chomp}:1:jobs")
|
256
|
+
workerA.register_worker
|
257
|
+
|
258
|
+
workerB = Resque::Worker.new(:high, :low)
|
259
|
+
workerB.instance_variable_set(:@to_s, "#{`hostname`.chomp}:2:high,low")
|
260
|
+
workerB.register_worker
|
261
|
+
|
262
|
+
assert_equal 2, Resque.workers.size
|
263
|
+
|
264
|
+
# then we prune them
|
265
|
+
@worker.work(0) do
|
266
|
+
assert_equal 1, Resque.workers.size
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
test "Processed jobs count" do
|
271
|
+
@worker.work(0)
|
272
|
+
assert_equal 1, Resque.info[:processed]
|
273
|
+
end
|
274
|
+
|
275
|
+
test "Will call a before_first_fork hook only once" do
|
276
|
+
Resque.redis.flushall
|
277
|
+
$BEFORE_FORK_CALLED = 0
|
278
|
+
Resque.before_first_fork = Proc.new { $BEFORE_FORK_CALLED += 1 }
|
279
|
+
workerA = Resque::Worker.new(:jobs)
|
280
|
+
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
281
|
+
|
282
|
+
assert_equal 0, $BEFORE_FORK_CALLED
|
283
|
+
|
284
|
+
workerA.work(0)
|
285
|
+
assert_equal 1, $BEFORE_FORK_CALLED
|
286
|
+
|
287
|
+
# TODO: Verify it's only run once. Not easy.
|
288
|
+
# workerA.work(0)
|
289
|
+
# assert_equal 1, $BEFORE_FORK_CALLED
|
290
|
+
end
|
291
|
+
|
292
|
+
test "Will call a before_fork hook before forking" do
|
293
|
+
Resque.redis.flushall
|
294
|
+
$BEFORE_FORK_CALLED = false
|
295
|
+
Resque.before_fork = Proc.new { $BEFORE_FORK_CALLED = true }
|
296
|
+
workerA = Resque::Worker.new(:jobs)
|
297
|
+
|
298
|
+
assert !$BEFORE_FORK_CALLED
|
299
|
+
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
300
|
+
workerA.work(0)
|
301
|
+
assert $BEFORE_FORK_CALLED
|
302
|
+
end
|
303
|
+
|
304
|
+
test "very verbose works in the afternoon" do
|
305
|
+
require 'time'
|
306
|
+
$last_puts = ""
|
307
|
+
$fake_time = Time.parse("15:44:33 2011-03-02")
|
308
|
+
singleton = class << @worker; self end
|
309
|
+
singleton.send :define_method, :puts, lambda { |thing| $last_puts = thing }
|
310
|
+
|
311
|
+
@worker.very_verbose = true
|
312
|
+
@worker.log("some log text")
|
313
|
+
|
314
|
+
assert_match /\*\* \[15:44:33 2011-03-02\] \d+: some log text/, $last_puts
|
315
|
+
end
|
316
|
+
|
317
|
+
test "Will call an after_fork hook after forking" do
|
318
|
+
Resque.redis.flushall
|
319
|
+
$AFTER_FORK_CALLED = false
|
320
|
+
Resque.after_fork = Proc.new { $AFTER_FORK_CALLED = true }
|
321
|
+
workerA = Resque::Worker.new(:jobs)
|
322
|
+
|
323
|
+
assert !$AFTER_FORK_CALLED
|
324
|
+
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
325
|
+
workerA.work(0)
|
326
|
+
assert $AFTER_FORK_CALLED
|
327
|
+
end
|
328
|
+
|
329
|
+
test "returns PID of running process" do
|
330
|
+
assert_equal @worker.to_s.split(":")[1].to_i, @worker.pid
|
331
|
+
end
|
332
|
+
end
|
metadata
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: steini-resque
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 85
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 18
|
9
|
+
- 5
|
10
|
+
version: 1.18.5
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Chris Wanstrath
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-08-30 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: redis-namespace
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 19
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
- 2
|
34
|
+
version: 1.0.2
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: vegas
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 31
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
- 1
|
49
|
+
- 2
|
50
|
+
version: 0.1.2
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: sinatra
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 63
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
- 9
|
65
|
+
- 2
|
66
|
+
version: 0.9.2
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: multi_json
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 15
|
78
|
+
segments:
|
79
|
+
- 1
|
80
|
+
- 0
|
81
|
+
version: "1.0"
|
82
|
+
type: :runtime
|
83
|
+
version_requirements: *id004
|
84
|
+
description: " Resque is a Redis-backed Ruby library for creating background jobs,\n placing those jobs on multiple queues, and processing them later.\n\n Background jobs can be any Ruby class or module that responds to\n perform. Your existing classes can easily be converted to background\n jobs or you can create new classes specifically to do work. Or, you\n can do both.\n\n Resque is heavily inspired by DelayedJob (which rocks) and is\n comprised of three parts:\n\n * A Ruby library for creating, querying, and processing jobs\n * A Rake task for starting a worker which processes jobs\n * A Sinatra app for monitoring queues, jobs, and workers.\n"
|
85
|
+
email: chris@ozmm.org
|
86
|
+
executables:
|
87
|
+
- resque
|
88
|
+
- resque-web
|
89
|
+
extensions: []
|
90
|
+
|
91
|
+
extra_rdoc_files:
|
92
|
+
- LICENSE
|
93
|
+
- README.markdown
|
94
|
+
files:
|
95
|
+
- README.markdown
|
96
|
+
- Rakefile
|
97
|
+
- LICENSE
|
98
|
+
- HISTORY.md
|
99
|
+
- lib/tasks/resque.rake
|
100
|
+
- lib/tasks/redis.rake
|
101
|
+
- lib/resque/stat.rb
|
102
|
+
- lib/resque/errors.rb
|
103
|
+
- lib/resque/version.rb
|
104
|
+
- lib/resque/plugin.rb
|
105
|
+
- lib/resque/failure/multiple.rb
|
106
|
+
- lib/resque/failure/redis.rb
|
107
|
+
- lib/resque/failure/hoptoad.rb
|
108
|
+
- lib/resque/failure/base.rb
|
109
|
+
- lib/resque/job.rb
|
110
|
+
- lib/resque/tasks.rb
|
111
|
+
- lib/resque/server/test_helper.rb
|
112
|
+
- lib/resque/server/public/poll.png
|
113
|
+
- lib/resque/server/public/jquery.relatize_date.js
|
114
|
+
- lib/resque/server/public/reset.css
|
115
|
+
- lib/resque/server/public/idle.png
|
116
|
+
- lib/resque/server/public/jquery-1.3.2.min.js
|
117
|
+
- lib/resque/server/public/favicon.ico
|
118
|
+
- lib/resque/server/public/working.png
|
119
|
+
- lib/resque/server/public/ranger.js
|
120
|
+
- lib/resque/server/public/style.css
|
121
|
+
- lib/resque/server/views/stats.erb
|
122
|
+
- lib/resque/server/views/key_string.erb
|
123
|
+
- lib/resque/server/views/workers.erb
|
124
|
+
- lib/resque/server/views/next_more.erb
|
125
|
+
- lib/resque/server/views/key_sets.erb
|
126
|
+
- lib/resque/server/views/working.erb
|
127
|
+
- lib/resque/server/views/overview.erb
|
128
|
+
- lib/resque/server/views/queues.erb
|
129
|
+
- lib/resque/server/views/failed.erb
|
130
|
+
- lib/resque/server/views/error.erb
|
131
|
+
- lib/resque/server/views/layout.erb
|
132
|
+
- lib/resque/worker.rb
|
133
|
+
- lib/resque/helpers.rb
|
134
|
+
- lib/resque/failure.rb
|
135
|
+
- lib/resque/server.rb
|
136
|
+
- lib/resque.rb
|
137
|
+
- bin/resque
|
138
|
+
- bin/resque-web
|
139
|
+
- test/test_helper.rb
|
140
|
+
- test/job_hooks_test.rb
|
141
|
+
- test/hoptoad_test.rb
|
142
|
+
- test/redis-test.conf
|
143
|
+
- test/worker_test.rb
|
144
|
+
- test/resque-web_test.rb
|
145
|
+
- test/resque_test.rb
|
146
|
+
- test/plugin_test.rb
|
147
|
+
- test/job_plugins_test.rb
|
148
|
+
has_rdoc: true
|
149
|
+
homepage: http://github.com/defunkt/resque
|
150
|
+
licenses: []
|
151
|
+
|
152
|
+
post_install_message:
|
153
|
+
rdoc_options:
|
154
|
+
- --charset=UTF-8
|
155
|
+
require_paths:
|
156
|
+
- lib
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
+
none: false
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
hash: 3
|
163
|
+
segments:
|
164
|
+
- 0
|
165
|
+
version: "0"
|
166
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
|
+
none: false
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
hash: 3
|
172
|
+
segments:
|
173
|
+
- 0
|
174
|
+
version: "0"
|
175
|
+
requirements: []
|
176
|
+
|
177
|
+
rubyforge_project:
|
178
|
+
rubygems_version: 1.3.7
|
179
|
+
signing_key:
|
180
|
+
specification_version: 3
|
181
|
+
summary: Resque is a Redis-backed queueing system.
|
182
|
+
test_files: []
|
183
|
+
|