From 1fd89260566eae1b8d3531bf83233eb18c27ab3d Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Sat, 13 Oct 2012 09:54:34 -0700 Subject: [PATCH] Test that a Rails.queue consumer is automatically started in production --- railties/lib/rails/application/configuration.rb | 2 +- railties/lib/rails/application/finisher.rb | 3 ++- railties/test/application/queue_test.rb | 12 +++++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb index 2bcdb3d502..9b89d7094c 100644 --- a/railties/lib/rails/application/configuration.rb +++ b/railties/lib/rails/application/configuration.rb @@ -44,7 +44,7 @@ def initialize(*) @autoflush_log = true @log_formatter = ActiveSupport::Logger::SimpleFormatter.new @queue = ActiveSupport::SynchronousQueue.new - @queue_consumer = ActiveSupport::ThreadedQueueConsumer + @queue_consumer = nil @eager_load = nil @assets = ActiveSupport::OrderedOptions.new diff --git a/railties/lib/rails/application/finisher.rb b/railties/lib/rails/application/finisher.rb index 26fca503a0..4a15a36ba9 100644 --- a/railties/lib/rails/application/finisher.rb +++ b/railties/lib/rails/application/finisher.rb @@ -98,7 +98,8 @@ module Finisher initializer :activate_queue_consumer do |app| if config.queue.class == ActiveSupport::Queue - app.queue_consumer = config.queue_consumer.start + app.queue_consumer = config.queue_consumer || config.queue.consumer + app.queue_consumer.start at_exit { app.queue_consumer.shutdown } end end diff --git a/railties/test/application/queue_test.rb b/railties/test/application/queue_test.rb index b4c9a31185..b0b3cf18e9 100644 --- a/railties/test/application/queue_test.rb +++ b/railties/test/application/queue_test.rb @@ -69,6 +69,17 @@ def ran? refute job.ran_in_different_thread?, "Expected job to run in the same thread" end + test "in production, automatically spawn a queue consumer in a background thread" do + add_to_env_config "production", <<-RUBY + config.queue = ActiveSupport::Queue.new + RUBY + + app("production") + + assert_nil Rails.application.config.queue_consumer + assert_kind_of ActiveSupport::ThreadedQueueConsumer, Rails.application.queue_consumer + end + test "attempting to marshal a queue will raise an exception" do app("test") assert_raises TypeError do @@ -123,7 +134,6 @@ class MyQueueConsumer def start @started = true - self end end RUBY