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 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 @delayed_jobs = true, you can queue
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
- Resque.mongo = Mongo::Connection.new.db("my_awesome_queue")
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
- @delay_allowed = []
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
- delay_allowed = mongo_stats.find_one({ :stat => 'Delayable Queues'}, { :fields => ['value']})
50
- @delay_allowed = delay_allowed['value'].map{ |queue| queue.to_sym} if delay_allowed
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 allows_delayed_jobs(klass)
118
- klass.instance_variable_get(:@delayed_jobs) ||
119
- (klass.respond_to?(:delayed_jobs) and klass.delayed_jobs)
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 queue_allows_delayed(queue)
123
- queue = namespace_queue(queue)
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 queue_allows_delayed queue
130
- @delay_allowed << queue
131
- mongo_stats.update({:stat => 'Delayable Queues'}, { '$addToSet' => { 'value' => queue}}, { :upsert => true})
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 queue_allows_delayed queue
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 queue_allows_delayed queue
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 queue_allows_delayed queue
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 queue_allows_delayed(key)
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
@@ -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
@@ -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
- if defined? Yajl
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
- if defined? Yajl
34
- begin
35
- Yajl::Parser.parse(object, :check_utf8 => false)
36
- rescue Yajl::ParseError => e
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.queue_allows_delayed(queue)
49
- if Resque.allows_delayed_jobs(klass)
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.allows_delayed_jobs(klass)
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 Errno::ECONNREFUSED
103
- erb :error, {:layout => false}, :error => "Can't connect to Redis! (#{Resque.redis_id})"
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
- <% if !resque.queue_allows_delayed queue.to_sym %>
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.queue_allows_delayed(queue.to_sym) %></td>
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
@@ -1,3 +1,3 @@
1
1
  module Resque
2
- Version = VERSION = '1.17.1'
2
+ Version = VERSION = '1.18.2'
3
3
  end
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 = #encode \
371
- { :queue => job.queue,
372
- :run_at => Time.now.to_s,
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 array of string pids of all the other workers on this
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
- date: 2011-07-19 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: vegas
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: 0.1.2
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
- requirement: &id002 !ruby/object:Gem::Requirement
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.9.2
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
- requirement: &id003 !ruby/object:Gem::Requirement
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: 1.4.6
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
- requirement: &id004 !ruby/object:Gem::Requirement
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.3.0
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
60
55
  type: :runtime
61
- version_requirements: *id004
62
- 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 Mongo-Resque is the same thing, but for mongo. It would not exist\n without the work of defunkt and ctrochalakis on github.\n"
63
- email:
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: http://github.com/dbackeus/mongo-resque
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: "0"
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: "0"
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
139
136
  requirements: []
140
-
141
137
  rubyforge_project:
142
- rubygems_version: 1.7.2
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: