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 +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
|