aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
authorCarlos Antonio da Silva <carlosantoniodasilva@gmail.com>2012-05-03 00:15:50 -0300
committerCarlos Antonio da Silva <carlosantoniodasilva@gmail.com>2012-05-04 09:11:44 -0300
commit8fbf2e197f0a327ab95bc85b3d3d683e68e09cf3 (patch)
tree05722b7d529a1605a42769db57bb8a56e630e803 /railties
parent1385388452c6dc86afe0668c41e0f5a491dc193a (diff)
downloadrails-8fbf2e197f0a327ab95bc85b3d3d683e68e09cf3.tar.gz
rails-8fbf2e197f0a327ab95bc85b3d3d683e68e09cf3.tar.bz2
rails-8fbf2e197f0a327ab95bc85b3d3d683e68e09cf3.zip
Allow overriding exception handling in threaded consumer
Diffstat (limited to 'railties')
-rw-r--r--railties/lib/rails/queueing.rb6
-rw-r--r--railties/test/queueing/threaded_consumer_test.rb19
2 files changed, 24 insertions, 1 deletions
diff --git a/railties/lib/rails/queueing.rb b/railties/lib/rails/queueing.rb
index 2e187b8555..896dd91034 100644
--- a/railties/lib/rails/queueing.rb
+++ b/railties/lib/rails/queueing.rb
@@ -53,7 +53,7 @@ module Rails
begin
job.run
rescue Exception => e
- Rails.logger.error "Job Error: #{e.message}\n#{e.backtrace.join("\n")}"
+ handle_exception e
end
end
end
@@ -64,6 +64,10 @@ module Rails
@queue.push nil
@thread.join
end
+
+ def handle_exception(e)
+ Rails.logger.error "Job Error: #{e.message}\n#{e.backtrace.join("\n")}"
+ end
end
end
end
diff --git a/railties/test/queueing/threaded_consumer_test.rb b/railties/test/queueing/threaded_consumer_test.rb
index 559de2a82d..c34a966d6e 100644
--- a/railties/test/queueing/threaded_consumer_test.rb
+++ b/railties/test/queueing/threaded_consumer_test.rb
@@ -78,4 +78,23 @@ class TestThreadConsumer < ActiveSupport::TestCase
assert_equal 1, logger.logged(:error).size
assert_match(/Job Error: RuntimeError: Error!/, logger.logged(:error).last)
end
+
+ test "test overriding exception handling" do
+ @consumer.shutdown
+ @consumer = Class.new(Rails::Queueing::ThreadedConsumer) do
+ attr_reader :last_error
+ def handle_exception(e)
+ @last_error = e.message
+ end
+ end.start(@queue)
+
+ job = Job.new(1) do
+ raise "RuntimeError: Error!"
+ end
+
+ @queue.push job
+ sleep 0.1
+
+ assert_equal "RuntimeError: Error!", @consumer.last_error
+ end
end