when do you use initializer vs environments/*.rb

Hi,

I am setting up my smtp settings. In the past I would put them in config/environments/development.rb for my development environment and config/environments/production.rb for my production envrionment.

However Rails 2.0 seems to be encouraging people to create their own initializers, such as mail.rb, under config/initializers. Is it better to do it this way? If I do it that way how do I differentiate envrionments?

I'm no expert, but I think initializers are only to keep your environment.rb file clean, and you can't differentiate between environments.

That's what I'm inferring from http://ryandaigle.com/articles/2007/2/23/what-s-new-in-edge-rails-stop-littering-your-evnrionment-rb-with-custom-initializations

I’m no expert, but I think initializers are only to keep your environment.rb file clean, and you can’t differentiate between environments.

Well… you can. What you can’t do, is use different files for a different environment. The files in initializers are “appended” to the general environment.rb if you will. That means you can still use conditional rails environment detection (if RAILS_ENV==“production”).

Another big advantage of the initializers to us is capistrano deployment. We have a certain application that needs to be rolled out to several private customer servers, each with their own settings (e.g. SMTP server for one customer, sendmail for another, …). In the past, we’d have to keep a different environment.rb file for each customer, even if 90% of all data in there was exactly the same. With the initializers, we can just write away a custom configuration if there’s a need.

That’s what I’m inferring from http://ryandaigle.com/articles/2007/2/23/what-s-new-in-edge-rails-stop-littering-your-evnrionment-rb-with-custom-initializations

Best regards

Peter De Berdt