0

我的 ActionMailer 在生产和开发中都能正常工作。我为每个环境使用不同的 smtp 设置,使用 gmail 进行开发,并通过 Heroku 使用 SendGrid 帐户进行生产。我手动切换 setup_mail.rb 文件中的设置以在开发中工作,然后在投入生产之前将它们切换回来。这可以防止我的 gmail 密码在 github 上公开,因为 SendGrid/Heroku 设置在文件中不需要我的密码:

开发 setup_mail.rb

    ActionMailer::Base.smtp_settings = {
      :address              => "smtp.gmail.com",
      :port                 => 587,
      :domain               => "mysite.com",
      :user_name            => "me@mysite.com",
      :password             => 'mypassword',
      :authentication       => "plain",
      :enable_starttls_auto => true
}

生产 setup_mail.rb

ActionMailer::Base.smtp_settings = {
  :address        => 'smtp.sendgrid.net',
  :port           => '587',
  :authentication => :plain,
  :user_name      => ENV['SENDGRID_USERNAME'],
  :password       => ENV['SENDGRID_PASSWORD'],
  :domain         => 'heroku.com'
}
ActionMailer::Base.delivery_method = :smtp

我担心我会不小心将带有密码的开发设置推送到 github。我想停止手动切换设置以防止这种情况发生。如何为开发和生产设置不同的 ActionMailer Base smtp 设置?谢谢

4

1 回答 1

2

在 production.rb 和 development.rb 中有这个设置,而不是硬编码你的密码,你也可以在本地使用环境变量,在你的项目中创建一个 .env 文件,它会在你cd进入时加载:

EMAIL=me@mysite.com
EMAIL_PASSWORD= mypassword

在 development.rb 中使用ENV['EMAIL']ANDENV['EMAIL_PASSWORD']

于 2013-03-06T17:46:12.680 回答