mongo-resque 1.17.1 → 1.18.2

Sign up to get free protection for your applications and to get access to all the features.
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: