Rails Plugins with Multi-Threading
2008-11-13
I tested tracknowledge with Rails 2.2 yesterday. The main problem was with plugins: two out of the six I use failed with the same issue when used with threadsafe!
The issue is that ActiveSupport’s autoloading is turned off once threadsafe! is executed because autoloading is inherently thread-unsafe. These plugins were not explicitly requiring their classes in init.rb but instead relying on autoloading like so:
config/environment.rb:
Rails::Initializer.run do |config| config.threadsafe! end ExceptionNotifier.exception_recipients = %w(mikeATtracknowledge.org)
Yes, ExceptionNotifier was one of the broken plugins along with the GeoKit plugin. The fix is simple:
diff --git a/vendor/plugins/exception_notification/init.rb b/vendor/plugins/exception_notification/init.rb index b39bd95..b1dd2d9 100644 --- a/vendor/plugins/exception_notification/init.rb +++ b/vendor/plugins/exception_notification/init.rb @@ -1 +1,4 @@ require "action_mailer" +require 'exception_notifier' +require 'exception_notifiable' +require 'exception_notifier_helper'
If you maintain a Rails plugin, make sure you verify that all classes are loaded in init.rb or you could very well have problems too.