Hello,

TL;DR: I'd like to move ActionMailer configuration to confg/mail.yml (just
like config/database.yml). In order to make that possible (in a sane way),
I would like to standardize the way ActiveRecord and ActionMailer are
configured.


As I was poking around to see how I would implement configuring
ActionMailer with config/mail.yml, I was reminded how different the
configuration APIs for ActiveRecord and ActionMailer are.
My plan is to make the ActionMailer configuration api mirror the
ActiveRecord configuration api. That is, the following should work:

# current ActiveRecord configuration
ActiveRecord::Base.configurations = {
  development: {
    adapter:    "postgresql",
    host:       "localhost",
    database:   "myapp_development",
    username:   "rails",
    password:   "sekret",
  },
  test: {
    adapter:    "sqlite3",
    database:   "db/test.sqlite3",
    pool:       5,
    timeout:    5000,
  },
  production: { } # ... etc
}

# proposed ActionMailer configuration
ActionMailer::Base.configurations = {
  development: {
    adapter:    "sendmail",                     # renamed from
delivery_method to match ActiveRecord
    location:   "/usr/sbin/sendmail",
    arguments:  "-i -t",
  },
  test: { adapter: "test" },                    # this would be the default
  production: {
    adapter:          "smtp",
    host:             "smtp.sendgrid.net",      # renamed from address
    port:             "587",
    authentication:   :plain,
    username:         ENV["SENDGRID_USERNAME"], # renamed from user_name
    password:         ENV["SENDGRID_PASSWORD"],
  },
}


I chose to make ActionMailer like ActiveRecord because I think that more
people know ActiveRecord's configuration. However, if there is something
about the way ActionMailer is configured that is desired, then
ActiveRecord's configuration could also be changed (although it seems like
it would be harder to change and deprecate ActiveRecord configuration).

A few thoughts:

* ActionMailer stores configuration for each delivery method
(`smtp_settings`, `sendmail_settings`). I'm not sure why this is, but to me
it makes more sense to flatten this configuration structure and split it up
by environment.
* This would be a major configuration change. If the change is accepted, I
would write graceful deprecation and perhaps a migration helper.
* I mentioned this idea to Aaron Patterson at Railsconf. He brought up the
idea of having a more generic configuration storage mechanizm. While I'm
not specifically working on that, I think this is a step in that direction.

A few questions:

* Any thoughts in general? Is this a good idea? Does anyone have major
problems with this?
* Does it make sense to rename configuration options such as renaming
`address` to `host` in order to match the ActiveRecord configuration
options more closely? Once again, I would make sure to not break existing
configurations.
* Is there anything about the current ActionMailer configuration api that
is better than ActiveRecord's?

I will start chipping away at this, and probably come back with more
questions after a first pass.
I would apreciate any initial feedback.

Thank you for your time,


-Amiel

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to