mongo-resque 1.17.1 → 1.18.2
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/HISTORY.md +18 -0
- data/README.markdown +13 -2
- data/docs/HOOKS.md +3 -0
- data/lib/resque.rb +26 -26
- data/lib/resque/delayed.rb +68 -0
- data/lib/resque/failure/redis.rb +7 -2
- data/lib/resque/helpers.rb +13 -17
- data/lib/resque/job.rb +3 -3
- data/lib/resque/plugin.rb +5 -0
- data/lib/resque/server.rb +6 -5
- data/lib/resque/server/views/queues.erb +2 -2
- data/lib/resque/tasks.rb +10 -1
- data/lib/resque/version.rb +1 -1
- data/lib/resque/worker.rb +31 -6
- metadata +59 -65
data/HISTORY.md
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
## 1.18.2 (2011-08-19)
|
2
|
+
|
3
|
+
* Fix RAILS_ROOT deprecation warning
|
4
|
+
|
5
|
+
## 1.18.1 (2011-08-19)
|
6
|
+
|
7
|
+
* Bugfix: Use RAILS_ROOT in preload task
|
8
|
+
|
9
|
+
## 1.18.0 (2011-08-18)
|
10
|
+
|
11
|
+
* Added before_enqueue hook.
|
12
|
+
* Resque workers now preload files under app/ in Rails
|
13
|
+
* Switch to MultiJSON
|
14
|
+
* Bugfix: Finding worker pids on Solaris
|
15
|
+
* Web UI: Fix NaN days ago for worker screens
|
16
|
+
* Web UI: Add Cache-Control header to prevent proxy caching
|
17
|
+
* Web UI: Update Resque.redis_id so it can be used in a distributed ring.
|
18
|
+
|
1
19
|
## 1.17.1 (2011-05-30)
|
2
20
|
|
3
21
|
* More monit typo fixes
|
data/README.markdown
CHANGED
@@ -29,19 +29,30 @@ the change was for the better or not (we avoid dependency troubles this way).
|
|
29
29
|
Delayed Jobs
|
30
30
|
------------
|
31
31
|
|
32
|
-
If your job class indicates that @
|
32
|
+
If your job class indicates that @delayed = true, you can queue
|
33
33
|
delayed jobs. These jobs will not be popped off the queue until the
|
34
34
|
Time indicated in arg[0][:delay_until] has come. Note that you must
|
35
35
|
call Resque.enable_delay(:queue) before enququing any delayed jobs, to
|
36
36
|
ensure that the performance impact on other queues is minimal.
|
37
37
|
|
38
|
+
Bundling
|
39
|
+
========
|
40
|
+
|
41
|
+
Make sure you use the right require in your Gemfile.
|
42
|
+
|
43
|
+
``` ruby
|
44
|
+
gem 'mongo-resque', :require => 'resque'
|
45
|
+
```
|
46
|
+
|
38
47
|
Configuration
|
39
48
|
=============
|
40
49
|
|
41
50
|
Resque.redis= has been replaced with Resque.mongo= and expects a Mongo::DB
|
42
51
|
object as an argument.
|
43
52
|
|
44
|
-
|
53
|
+
``` ruby
|
54
|
+
Resque.mongo = Mongo::Connection.new.db("my_awesome_queue")
|
55
|
+
```
|
45
56
|
|
46
57
|
Stern Warnings
|
47
58
|
==============
|
data/docs/HOOKS.md
CHANGED
@@ -66,6 +66,9 @@ An unnamed hook (`before_perform`) will be executed first.
|
|
66
66
|
|
67
67
|
The available hooks are:
|
68
68
|
|
69
|
+
* `before_enqueue`: Called with the job args before a job is placed on the queue.
|
70
|
+
If the hook returns `false`, the job will not be placed on the queue.
|
71
|
+
|
69
72
|
* `after_enqueue`: Called with the job args after a job is placed on the queue.
|
70
73
|
Any exception raised propagates up to the code which queued the job.
|
71
74
|
|
data/lib/resque.rb
CHANGED
@@ -1,10 +1,3 @@
|
|
1
|
-
|
2
|
-
begin
|
3
|
-
require 'yajl'
|
4
|
-
rescue LoadError
|
5
|
-
require 'json'
|
6
|
-
end
|
7
|
-
|
8
1
|
require 'mongo'
|
9
2
|
|
10
3
|
require 'resque/version'
|
@@ -23,7 +16,7 @@ require 'resque/plugin'
|
|
23
16
|
module Resque
|
24
17
|
include Helpers
|
25
18
|
extend self
|
26
|
-
@
|
19
|
+
@delayed_queues = []
|
27
20
|
|
28
21
|
# Set the queue database. Expects a Mongo::DB object.
|
29
22
|
def mongo=(database)
|
@@ -46,8 +39,8 @@ module Resque
|
|
46
39
|
def initialize_mongo
|
47
40
|
mongo_workers.create_index :worker
|
48
41
|
mongo_stats.create_index :stat
|
49
|
-
|
50
|
-
@
|
42
|
+
delayed_queues = mongo_stats.find_one(:stat => 'Delayed Queues')
|
43
|
+
@delayed_queues = delayed_queues['value'] if delayed_queues
|
51
44
|
end
|
52
45
|
|
53
46
|
def mongo_workers
|
@@ -114,21 +107,20 @@ module Resque
|
|
114
107
|
"Resque Client connected to #{connection_info.host}:#{connection_info.port}/#{mongo.name}"
|
115
108
|
end
|
116
109
|
|
117
|
-
def
|
118
|
-
klass.instance_variable_get(:@
|
119
|
-
(klass.respond_to?(:
|
110
|
+
def delayed_job?(klass)
|
111
|
+
klass.instance_variable_get(:@delayed) ||
|
112
|
+
(klass.respond_to?(:delayed) and klass.delayed)
|
120
113
|
end
|
121
114
|
|
122
|
-
def
|
123
|
-
|
124
|
-
@delay_allowed.include?(queue.to_sym) || @delay_allowed.include?(queue.to_s)
|
115
|
+
def delayed_queue?(queue)
|
116
|
+
@delayed_queues.include? namespace_queue(queue)
|
125
117
|
end
|
126
118
|
|
127
119
|
def enable_delay(queue)
|
128
120
|
queue = namespace_queue(queue)
|
129
|
-
unless
|
130
|
-
@
|
131
|
-
mongo_stats.update({:stat => '
|
121
|
+
unless delayed_queue? queue
|
122
|
+
@delayed_queues << queue
|
123
|
+
mongo_stats.update({:stat => 'Delayed Queues'}, {'$addToSet' => {'value' => queue}}, {:upsert => true})
|
132
124
|
end
|
133
125
|
end
|
134
126
|
|
@@ -175,11 +167,9 @@ module Resque
|
|
175
167
|
def pop(queue)
|
176
168
|
queue = namespace_queue(queue)
|
177
169
|
query = {}
|
178
|
-
if
|
179
|
-
query['delay_until'] = { '$lt' => Time.now }
|
180
|
-
end
|
170
|
+
query['delay_until'] = { '$lt' => Time.now } if delayed_queue?(queue)
|
181
171
|
#sorting will result in significant performance penalties for large queues, you have been warned.
|
182
|
-
item = mongo[queue].find_and_modify(:query => query, :remove => true, :sort => [[:_id, :asc]]
|
172
|
+
item = mongo[queue].find_and_modify(:query => query, :remove => true, :sort => [[:_id, :asc]])
|
183
173
|
rescue Mongo::OperationFailure => e
|
184
174
|
return nil if e.message =~ /No matching object/
|
185
175
|
raise e
|
@@ -194,7 +184,7 @@ module Resque
|
|
194
184
|
|
195
185
|
def delayed_size(queue)
|
196
186
|
queue = namespace_queue(queue)
|
197
|
-
if
|
187
|
+
if delayed_queue? queue
|
198
188
|
mongo[queue].find({'delay_until' => { '$gt' => Time.now }}).count
|
199
189
|
else
|
200
190
|
mongo[queue].count
|
@@ -203,7 +193,7 @@ module Resque
|
|
203
193
|
|
204
194
|
def ready_size(queue)
|
205
195
|
queue = namespace_queue(queue)
|
206
|
-
if
|
196
|
+
if delayed_queue? queue
|
207
197
|
mongo[queue].find({'delay_until' => { '$lt' => Time.now }}).count
|
208
198
|
else
|
209
199
|
mongo[queue].count
|
@@ -228,7 +218,7 @@ module Resque
|
|
228
218
|
def list_range(key, start = 0, count = 1, mode = :ready)
|
229
219
|
query = { }
|
230
220
|
sort = []
|
231
|
-
if
|
221
|
+
if delayed_queue? key
|
232
222
|
if mode == :ready
|
233
223
|
query['delay_until'] = { '$not' => { '$gt' => Time.new}}
|
234
224
|
elsif mode == :delayed
|
@@ -283,12 +273,22 @@ module Resque
|
|
283
273
|
#
|
284
274
|
# This method is considered part of the `stable` API.
|
285
275
|
def enqueue(klass, *args)
|
276
|
+
# Perform before_enqueue hooks. Don't perform enqueue if any hook returns false
|
277
|
+
before_hooks = Plugin.before_enqueue_hooks(klass).collect do |hook|
|
278
|
+
klass.send(hook, *args)
|
279
|
+
end
|
280
|
+
return if before_hooks.any? { |result| result == false }
|
281
|
+
|
286
282
|
Job.create(queue_from_class(klass), klass, *args)
|
287
283
|
|
288
284
|
Plugin.after_enqueue_hooks(klass).each do |hook|
|
289
285
|
klass.send(hook, *args)
|
290
286
|
end
|
291
287
|
end
|
288
|
+
|
289
|
+
def enqueue_delayed(klass, *args)
|
290
|
+
|
291
|
+
end
|
292
292
|
|
293
293
|
# This method can be used to conveniently remove a job from a queue.
|
294
294
|
# It assumes the class you're passing it is a real Ruby class (not
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Resque
|
2
|
+
module DelayedJob
|
3
|
+
def before_enqueue_with_delay(*args)
|
4
|
+
unless Resque.delayed_queue?(self)
|
5
|
+
raise DelayedQueueError.new 'trying to insert a delayed job into a non-delayed queue'
|
6
|
+
end
|
7
|
+
unless args[0].is_a?(Hash) && args[0].has_key?(:delay_until)
|
8
|
+
raise DelayedQueueError.new 'trying to insert delayed job without delay_until'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def before_create_with_delay(item, *args)
|
13
|
+
item[:delay_until] = args[0][:delay_until]
|
14
|
+
end
|
15
|
+
|
16
|
+
def before_pop_with_delay(query)
|
17
|
+
query['delay_until'] = {'$lt' => Time.now } if delayed_queue?(queue)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module Delayed
|
22
|
+
def self.extended(base)
|
23
|
+
base.class_eval { @delayed_queues = [] }
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize_delayed
|
27
|
+
delayed_queues = mongo_stats.find_one(:stat => 'Delayed Queues')
|
28
|
+
@delayed_queues = delayed_queues['value'] if delayed_queues
|
29
|
+
end
|
30
|
+
|
31
|
+
def delayed_job?(klass)
|
32
|
+
klass.instance_variable_get(:@delayed) ||
|
33
|
+
(klass.respond_to?(:delayed) and klass.delayed)
|
34
|
+
end
|
35
|
+
|
36
|
+
def delayed_queue?(queue)
|
37
|
+
@delayed_queues.include? namespace_queue(queue)
|
38
|
+
end
|
39
|
+
|
40
|
+
def enable_delay(queue)
|
41
|
+
queue = namespace_queue(queue)
|
42
|
+
unless delayed_queue? queue
|
43
|
+
@delayed_queues << queue
|
44
|
+
mongo_stats.update({:stat => 'Delayed Queues'}, {'$addToSet' => {'value' => queue}}, {:upsert => true})
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def delayed_size(queue)
|
49
|
+
queue = namespace_queue(queue)
|
50
|
+
if delayed_queue? queue
|
51
|
+
mongo[queue].find({'delay_until' => { '$gt' => Time.now }}).count
|
52
|
+
else
|
53
|
+
mongo[queue].count
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def ready_size(queue)
|
58
|
+
queue = namespace_queue(queue)
|
59
|
+
if delayed_queue? queue
|
60
|
+
mongo[queue].find({'delay_until' => { '$lt' => Time.now }}).count
|
61
|
+
else
|
62
|
+
mongo[queue].count
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class DelayedQueueError < RuntimeError; end
|
68
|
+
end
|
data/lib/resque/failure/redis.rb
CHANGED
@@ -5,11 +5,11 @@ module Resque
|
|
5
5
|
class Redis < Base
|
6
6
|
def save
|
7
7
|
data = {
|
8
|
-
:failed_at => Time.now.strftime("%Y/%m/%d %H:%M:%S"),
|
8
|
+
:failed_at => Time.now.strftime("%Y/%m/%d %H:%M:%S %Z"),
|
9
9
|
:payload => payload,
|
10
10
|
:exception => exception.class.to_s,
|
11
11
|
:error => exception.to_s,
|
12
|
-
:backtrace => Array(exception.backtrace),
|
12
|
+
:backtrace => filter_backtrace(Array(exception.backtrace)),
|
13
13
|
:worker => worker.to_s,
|
14
14
|
:queue => queue
|
15
15
|
}
|
@@ -41,6 +41,11 @@ module Resque
|
|
41
41
|
Resque.redis.lset(:failed, index, id)
|
42
42
|
Resque.redis.lrem(:failed, 1, id)
|
43
43
|
end
|
44
|
+
|
45
|
+
def filter_backtrace(backtrace)
|
46
|
+
index = backtrace.index { |item| item.include?('/lib/resque/job.rb') }
|
47
|
+
backtrace.first(index.to_i)
|
48
|
+
end
|
44
49
|
end
|
45
50
|
end
|
46
51
|
end
|
data/lib/resque/helpers.rb
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
require 'multi_json'
|
2
|
+
|
3
|
+
# OkJson won't work because it doesn't serialize symbols
|
4
|
+
# in the same way yajl and json do.
|
5
|
+
if MultiJson.engine.to_s == 'MultiJson::Engines::OkJson'
|
6
|
+
raise "Please install the yajl-ruby or json gem"
|
7
|
+
end
|
8
|
+
|
1
9
|
module Resque
|
2
10
|
# Methods used by various classes in Resque.
|
3
11
|
module Helpers
|
@@ -19,29 +27,17 @@ module Resque
|
|
19
27
|
# Given a Ruby object, returns a string suitable for storage in a
|
20
28
|
# queue.
|
21
29
|
def encode(object)
|
22
|
-
|
23
|
-
Yajl::Encoder.encode(object)
|
24
|
-
else
|
25
|
-
object.to_json
|
26
|
-
end
|
30
|
+
::MultiJson.encode(object)
|
27
31
|
end
|
28
32
|
|
29
33
|
# Given a string, returns a Ruby object.
|
30
34
|
def decode(object)
|
31
35
|
return unless object
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
raise DecodeException, e
|
38
|
-
end
|
39
|
-
else
|
40
|
-
begin
|
41
|
-
JSON.parse(object)
|
42
|
-
rescue JSON::ParserError => e
|
43
|
-
raise DecodeException, e
|
44
|
-
end
|
37
|
+
begin
|
38
|
+
::MultiJson.decode(object)
|
39
|
+
rescue ::MultiJson::DecodeError => e
|
40
|
+
raise DecodeException, e
|
45
41
|
end
|
46
42
|
end
|
47
43
|
|
data/lib/resque/job.rb
CHANGED
@@ -45,8 +45,8 @@ module Resque
|
|
45
45
|
item = { :class => klass.to_s, :args => args}
|
46
46
|
|
47
47
|
#are we trying to put a non-delayed job into a delayed queue?
|
48
|
-
if Resque.
|
49
|
-
if Resque.
|
48
|
+
if Resque.delayed_queue?(queue)
|
49
|
+
if Resque.delayed_job?(klass)
|
50
50
|
if args[0].is_a?(Hash) && args[0].has_key?(:delay_until)
|
51
51
|
item[:delay_until] = args[0][:delay_until]
|
52
52
|
else
|
@@ -56,7 +56,7 @@ module Resque
|
|
56
56
|
raise QueueError.new 'trying to insert non-delayed job into delayed queue'
|
57
57
|
end
|
58
58
|
else
|
59
|
-
if Resque.
|
59
|
+
if Resque.delayed_job?(klass)
|
60
60
|
raise QueueError.new 'trying to insert a delayed job into a non-delayed queue'
|
61
61
|
end
|
62
62
|
end
|
data/lib/resque/plugin.rb
CHANGED
@@ -47,5 +47,10 @@ module Resque
|
|
47
47
|
def after_enqueue_hooks(job)
|
48
48
|
job.methods.grep(/^after_enqueue/).sort
|
49
49
|
end
|
50
|
+
|
51
|
+
# Given an object, returns a list `before_enqueue` hook names.
|
52
|
+
def before_enqueue_hooks(job)
|
53
|
+
job.methods.grep(/^before_enqueue/).sort
|
54
|
+
end
|
50
55
|
end
|
51
56
|
end
|
data/lib/resque/server.rb
CHANGED
@@ -97,13 +97,14 @@ module Resque
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def show(page, layout = true)
|
100
|
+
response["Cache-Control"] = "max-age=0, private, must-revalidate"
|
100
101
|
begin
|
101
102
|
erb page.to_sym, {:layout => layout}, :resque => Resque
|
102
|
-
rescue
|
103
|
-
erb :error, {:layout => false}, :error => "Can't connect to
|
103
|
+
rescue Mongo::ConnectionError, Mongo::ConnectionFailure
|
104
|
+
erb :error, {:layout => false}, :error => "Can't connect to MongoDB!"
|
104
105
|
end
|
105
106
|
end
|
106
|
-
|
107
|
+
|
107
108
|
def show_for_polling(page)
|
108
109
|
content_type "text/html"
|
109
110
|
@polling = true
|
@@ -174,12 +175,12 @@ module Resque
|
|
174
175
|
get "/?" do
|
175
176
|
redirect url_path(:overview)
|
176
177
|
end
|
177
|
-
|
178
|
+
|
178
179
|
%w( overview workers ).each do |page|
|
179
180
|
get "/#{page}.poll" do
|
180
181
|
show_for_polling(page)
|
181
182
|
end
|
182
|
-
|
183
|
+
|
183
184
|
get "/#{page}/:id.poll" do
|
184
185
|
show_for_polling(page)
|
185
186
|
end
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<form method="POST" action="<%=u "/queues/#{queue}/remove" %>" class='remove-queue'>
|
6
6
|
<input type='submit' name='' value='Remove Queue' onclick='return confirm("Are you absolutely sure? This cannot be undone.");' />
|
7
7
|
</form>
|
8
|
-
<%
|
8
|
+
<% unless resque.delayed_queue? queue %>
|
9
9
|
<p class='sub'>Showing <%= start = params[:start].to_i %> to <%= start + 20 %> of <b><%=size = resque.size(queue.to_sym)%></b> jobs</p><table class='jobs'>
|
10
10
|
<tr>
|
11
11
|
<th>Class</th>
|
@@ -57,7 +57,7 @@
|
|
57
57
|
<tr>
|
58
58
|
<td class='queue'><a class="queue" href="<%= u "queues/#{queue}" %>"><%= queue %></a></td>
|
59
59
|
<td class='size'><%= resque.ready_size queue.to_sym %></td>
|
60
|
-
<td class='size'><%= resque.delayed_size(queue.to_sym) if resque.
|
60
|
+
<td class='size'><%= resque.delayed_size(queue.to_sym) if resque.delayed_queue?(queue) %></td>
|
61
61
|
</tr>
|
62
62
|
<% end %>
|
63
63
|
<tr class="<%= Resque::Failure.count.zero? ? "failed" : "failure" %>">
|
data/lib/resque/tasks.rb
CHANGED
@@ -5,7 +5,7 @@ namespace :resque do
|
|
5
5
|
task :setup
|
6
6
|
|
7
7
|
desc "Start a Resque worker"
|
8
|
-
task :work => :setup do
|
8
|
+
task :work => [ :preload, :setup ] do
|
9
9
|
require 'resque'
|
10
10
|
|
11
11
|
queues = (ENV['QUEUES'] || ENV['QUEUE']).to_s.split(',')
|
@@ -39,4 +39,13 @@ namespace :resque do
|
|
39
39
|
|
40
40
|
threads.each { |thread| thread.join }
|
41
41
|
end
|
42
|
+
|
43
|
+
# Preload app files if this is Rails
|
44
|
+
task :preload do
|
45
|
+
if defined? Rails
|
46
|
+
Dir["#{Rails.root}/app/**/*.rb"].each do |file|
|
47
|
+
require file
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
42
51
|
end
|
data/lib/resque/version.rb
CHANGED
data/lib/resque/worker.rb
CHANGED
@@ -292,7 +292,7 @@ module Resque
|
|
292
292
|
def paused?
|
293
293
|
@paused
|
294
294
|
end
|
295
|
-
|
295
|
+
|
296
296
|
# Stop processing jobs after the current one has completed (if we're
|
297
297
|
# currently running one).
|
298
298
|
def pause_processing
|
@@ -367,10 +367,9 @@ module Resque
|
|
367
367
|
# what workers are doing and when.
|
368
368
|
def working_on(job)
|
369
369
|
job.worker = self
|
370
|
-
data =
|
371
|
-
|
372
|
-
|
373
|
-
:payload => job.payload}
|
370
|
+
data = { :queue => job.queue,
|
371
|
+
:run_at => Time.now.strftime("%Y/%m/%d %H:%M:%S %Z"),
|
372
|
+
:payload => job.payload }
|
374
373
|
mongo_workers.update({:worker => self.to_s}, { '$set' => { 'working_on' => data}}, :upsert => true)
|
375
374
|
end
|
376
375
|
|
@@ -463,14 +462,40 @@ module Resque
|
|
463
462
|
@pid ||= to_s.split(":")[1].to_i
|
464
463
|
end
|
465
464
|
|
466
|
-
# Returns an
|
465
|
+
# Returns an Array of string pids of all the other workers on this
|
467
466
|
# machine. Useful when pruning dead workers on startup.
|
468
467
|
def worker_pids
|
468
|
+
if RUBY_PLATFORM =~ /solaris/
|
469
|
+
solaris_worker_pids
|
470
|
+
else
|
471
|
+
linux_worker_pids
|
472
|
+
end
|
473
|
+
end
|
474
|
+
|
475
|
+
# Find Resque worker pids on Linux and OS X.
|
476
|
+
#
|
477
|
+
# Returns an Array of string pids of all the other workers on this
|
478
|
+
# machine. Useful when pruning dead workers on startup.
|
479
|
+
def linux_worker_pids
|
469
480
|
`ps -A -o pid,command | grep [r]esque | grep -v "resque-web"`.split("\n").map do |line|
|
470
481
|
line.split(' ')[0]
|
471
482
|
end
|
472
483
|
end
|
473
484
|
|
485
|
+
# Find Resque worker pids on Solaris.
|
486
|
+
#
|
487
|
+
# Returns an Array of string pids of all the other workers on this
|
488
|
+
# machine. Useful when pruning dead workers on startup.
|
489
|
+
def solaris_worker_pids
|
490
|
+
`ps -A -o pid,comm | grep [r]uby | grep -v "resque-web"`.split("\n").map do |line|
|
491
|
+
real_pid = line.split(' ')[0]
|
492
|
+
pargs_command = `pargs -a #{real_pid} 2>/dev/null | grep [r]esque | grep -v "resque-web"`
|
493
|
+
if pargs_command.split(':')[1] == " resque-#{Resque::Version}"
|
494
|
+
real_pid
|
495
|
+
end
|
496
|
+
end.compact
|
497
|
+
end
|
498
|
+
|
474
499
|
# Given a string, sets the procline ($0) and logs.
|
475
500
|
# Procline is always in the format of:
|
476
501
|
# resque-VERSION: STRING
|
metadata
CHANGED
@@ -1,76 +1,75 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo-resque
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.18.2
|
4
5
|
prerelease:
|
5
|
-
version: 1.17.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- David Backeus
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
prerelease: false
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
12
|
+
date: 2011-08-22 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mongo
|
16
|
+
requirement: &2157276880 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
18
|
+
requirements:
|
21
19
|
- - ~>
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.3.0
|
24
22
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: sinatra
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: *2157276880
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: vegas
|
27
|
+
requirement: &2157276380 !ruby/object:Gem::Requirement
|
30
28
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 0.
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.1.2
|
35
33
|
type: :runtime
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: json
|
39
34
|
prerelease: false
|
40
|
-
|
35
|
+
version_requirements: *2157276380
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: sinatra
|
38
|
+
requirement: &2157275680 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
46
|
-
- - <
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: 1.6.0
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.9.2
|
49
44
|
type: :runtime
|
50
|
-
version_requirements: *id003
|
51
|
-
- !ruby/object:Gem::Dependency
|
52
|
-
name: mongo
|
53
45
|
prerelease: false
|
54
|
-
|
46
|
+
version_requirements: *2157275680
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: multi_json
|
49
|
+
requirement: &2157275100 !ruby/object:Gem::Requirement
|
55
50
|
none: false
|
56
|
-
requirements:
|
51
|
+
requirements:
|
57
52
|
- - ~>
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: 1.
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
60
55
|
type: :runtime
|
61
|
-
|
62
|
-
|
63
|
-
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2157275100
|
58
|
+
description: ! " Resque is a Redis-backed Ruby library for creating background
|
59
|
+
jobs,\n placing those jobs on multiple queues, and processing them later.\n\n
|
60
|
+
\ Mongo-Resque is the same thing, but for mongo. It would not exist\n without
|
61
|
+
the work of defunkt and ctrochalakis on github.\n"
|
62
|
+
email:
|
64
63
|
- david@streamio.se
|
65
|
-
executables:
|
64
|
+
executables:
|
66
65
|
- resque
|
67
66
|
- resque-web
|
68
67
|
extensions: []
|
69
|
-
|
70
|
-
extra_rdoc_files:
|
68
|
+
extra_rdoc_files:
|
71
69
|
- LICENSE
|
72
70
|
- README.markdown
|
73
|
-
files:
|
71
|
+
files:
|
72
|
+
- lib/resque/delayed.rb
|
74
73
|
- lib/resque/errors.rb
|
75
74
|
- lib/resque/failure/base.rb
|
76
75
|
- lib/resque/failure/hoptoad.rb
|
@@ -116,33 +115,28 @@ files:
|
|
116
115
|
- README.markdown
|
117
116
|
- LICENSE
|
118
117
|
- HISTORY.md
|
119
|
-
homepage:
|
118
|
+
homepage: https://github.com/streamio/mongo-resque
|
120
119
|
licenses: []
|
121
|
-
|
122
120
|
post_install_message:
|
123
121
|
rdoc_options: []
|
124
|
-
|
125
|
-
require_paths:
|
122
|
+
require_paths:
|
126
123
|
- lib
|
127
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
124
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
125
|
none: false
|
129
|
-
requirements:
|
130
|
-
- -
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version:
|
133
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ! '>='
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
131
|
none: false
|
135
|
-
requirements:
|
136
|
-
- -
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version:
|
132
|
+
requirements:
|
133
|
+
- - ! '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
139
136
|
requirements: []
|
140
|
-
|
141
137
|
rubyforge_project:
|
142
|
-
rubygems_version: 1.
|
138
|
+
rubygems_version: 1.8.6
|
143
139
|
signing_key:
|
144
140
|
specification_version: 3
|
145
141
|
summary: Mongo-Resque is a mongo-backed queueing system
|
146
142
|
test_files: []
|
147
|
-
|
148
|
-
has_rdoc:
|