beanstalker 0.4.14 → 0.4.15
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/VERSION +1 -1
- data/beanstalker.gemspec +2 -2
- data/lib/beanstalker/extend.rb +8 -0
- data/lib/beanstalker/worker.rb +45 -7
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
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.
|
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-
|
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 = [
|
data/lib/beanstalker/extend.rb
CHANGED
@@ -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)
|
data/lib/beanstalker/worker.rb
CHANGED
@@ -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
|
-
|
167
|
-
|
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:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 0.4.
|
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-
|
18
|
+
date: 2010-12-27 00:00:00 +03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|