beanstalker 0.4.14 → 0.4.15

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.14
1
+ 0.4.15
data/beanstalker.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{beanstalker}
8
- s.version = "0.4.14"
8
+ s.version = "0.4.15"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Gleb Pomykalov"]
12
- s.date = %q{2010-09-01}
12
+ s.date = %q{2010-12-27}
13
13
  s.description = %q{Beanstalker is a tool for executing long tasks in background in our rails application.}
14
14
  s.email = %q{glebpom@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -48,6 +48,14 @@ module Beanstalker::Extensions
48
48
  @class_methods_async_options.merge!(method.to_sym => options)
49
49
  end
50
50
  end
51
+
52
+ def async_rescue(&block)
53
+ @async_rescue = block
54
+ end
55
+
56
+ def async_error_handler
57
+ @async_rescue
58
+ end
51
59
  end
52
60
 
53
61
  def interpolate_async_options(options, object, *args)
@@ -49,7 +49,7 @@ class Beanstalker::Worker
49
49
  before_reserves.each {|b| b.call}
50
50
  end
51
51
  end
52
-
52
+
53
53
  def initialize(top_binding, options = {})
54
54
  @top_binding = top_binding
55
55
  @stop = false
@@ -96,7 +96,7 @@ class Beanstalker::Worker
96
96
  def q_hint
97
97
  @q_hint || Beanstalker::Queue.queue
98
98
  end
99
-
99
+
100
100
  def logger
101
101
  Daemonizer.logger or RAILS_DEFAULT_LOGGER
102
102
  end
@@ -162,11 +162,49 @@ class Beanstalker::Worker
162
162
  end
163
163
  end
164
164
 
165
+ def class_error_handler(klass)
166
+ if klass.respond_to?(:async_error_handler) and
167
+ async_error_handler = klass.async_error_handler and
168
+ async_error_handler.is_a?(Proc)
169
+ then
170
+ async_error_handler
171
+ else
172
+ false
173
+ end
174
+ end
175
+
165
176
  def handle_error(job, ex)
166
- if self.class.custom_error_handler
167
- self.class.custom_error_handler.call(job, ex)
177
+ custom_error_handler_ok = false
178
+ Daemonizer.logger.warn "Handling exception: #{ex.inspect}, job = #{job.id}"
179
+
180
+ if job[:class]
181
+ klass = Object.const_get(job[:class])
182
+ error_handler = class_error_handler(klass)
183
+ if error_handler.is_a?(Proc)
184
+ Daemonizer.logger.info "Running custom error handler for class #{job[:class]}, job = #{job.id}"
185
+ error_handler.call(job, ex)
186
+ job_reserved = begin
187
+ job.stats['state'] == 'reserved'
188
+ rescue Beanstalk::NotFoundError
189
+ false
190
+ end
191
+ if job_reserved
192
+ Daemonizer.logger.info "Custom error handler for class #{job[:class]} didn't release job. job = #{job.id}"
193
+ else
194
+ Daemonizer.logger.info "Custom error handler for class #{job[:class]} released job. job = #{job.id}"
195
+ custom_error_handler_ok = true
196
+ end
197
+ end
198
+ end
199
+
200
+ unless custom_error_handler_ok
201
+ Daemonizer.logger.info "Running common handler. job = #{job.id}"
202
+ if self.class.custom_error_handler
203
+ self.class.custom_error_handler.call(job, ex)
204
+ else
205
+ self.class.default_handle_error(job, ex)
206
+ end
168
207
  else
169
- self.class.default_handle_error(job, ex)
170
208
  end
171
209
  end
172
210
 
@@ -199,11 +237,11 @@ class Beanstalker::Worker
199
237
  f = self.class.before_filter
200
238
  statistics = job.stats.dup
201
239
  code = job[:code]
202
- can_run = f ? f.call(job) : true
240
+ can_run = f ? f.call(job) : true
203
241
  if can_run
204
242
  run_code(job)
205
243
  job.delete
206
- logger.info "Finished. Job id=#{statistics['id']}. Code '#{code}'. Time taken: #{(Time.now - t1).to_f} sec"
244
+ logger.info "Finished. Job id=#{statistics['id']}. Code '#{code}'. Time taken: #{(Time.now - t1).to_f} sec"
207
245
  else
208
246
  logger.info "Not runnind due to :before_filter restriction. Job id=#{statistics['id']}. Code '#{code}'."
209
247
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beanstalker
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 14
10
- version: 0.4.14
9
+ - 15
10
+ version: 0.4.15
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gleb Pomykalov
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-01 00:00:00 +04:00
18
+ date: 2010-12-27 00:00:00 +03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency