Rails 2.0.1 initializer weird infinite loop situation

Just switched an app over from 1.2 to 2.0. In accordance with the new convention, I moved my custom configuration information out of config/environment.rb and into config/initializers/ app_config.rb. I found that my actionmailer config block was causing an infinite loop (encompassing more than just the block itself). Nothing like this happened with 1.2.x. Here's the code (nothing special):

DOMAIN_NAME = 'example.com'

# Uses lib/smtp_tls.rb (Gmail SSL SMTP requires this) Rails::Initializer.run do |config|   config.action_mailer.perform_deliveries = false # For now   # config.action_mailer.perform_deliveries = true   config.action_mailer.raise_delivery_errors = true   config.action_mailer.delivery_method = :smtp   config.action_mailer.default_charset = :'utf-8'   config.action_mailer.smtp_settings = {     :address => 'smtp.gmail.com',     :port => 587,     :domain => DOMAIN_NAME,     :authentication => :plain,     :user_name => 'mailer@' + DOMAIN_NAME,     :password => 'secret'   } end

# ...

As is, Rails won't load and a never ending train of warnings about an already initialized constant DOMAIN_NAME shows in the console (evidence that the infinite loop encompasses more than the block). lib/ smtp_tls.rb is not the source of the problem and neither is the declaration of the constant.

There are two ways to fix this as far as I know - comment out the block and skip the configuration or put 'break' before 'end'.

Any ideas on what's behind this?

Just switched an app over from 1.2 to 2.0. In accordance with the new convention, I moved my custom configuration information out of config/environment.rb and into config/initializers/ app_config.rb. I found that my actionmailer config block was causing an infinite loop (encompassing more than just the block itself). Nothing like this happened with 1.2.x. Here's the code (nothing special):

DOMAIN_NAME = 'example.com'

# Uses lib/smtp_tls.rb (Gmail SSL SMTP requires this) Rails::Initializer.run do |config| config.action_mailer.perform_deliveries = false # For now # config.action_mailer.perform_deliveries = true config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp config.action_mailer.default_charset = :'utf-8' config.action_mailer.smtp_settings = {    :address => 'smtp.gmail.com',    :port => 587,    :domain => DOMAIN_NAME,    :authentication => :plain,    :user_name => 'mailer@' + DOMAIN_NAME,    :password => 'secret' } end

That's causing the initializer to be run again from your initializer
file, which loads your initializer file, which runs the initializer
again ...

Fred

Thanks Fred, that makes perfect sense. That being the case, how would I inject this configuration information into the mix then?

Thanks Fred, that makes perfect sense. That being the case, how would I inject this configuration information into the mix then?

I think that sort of stuff is fine to stay in environment.rb -
basically it's not about extracting stuff from the Rails::Initializer.run do |config| block but
about all the stuff at the bottom.

Fred

Will do. Thanks for the advice.