我让ActionMailer在生产和开发中都能正常工作。我为每个环境使用不同的smtp设置,使用gmail进行开发,并通过Heroku为生产使用SendGrid帐户。我手动切换setup_mail.rb文件中的设置以在开发中工作,然后在推入生产之前将其切换回来。这可以防止我的gmail密码在github上公开,因为SendGrid / Heroku设置在文件中不需要我的密码:
development 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设置?感谢
答案 0 :(得分:1)
在production.rb和development.rb中使用此设置,而不是将您的密码硬编码,您也可以在本地使用环境变量,在项目中创建一个.env文件,当您{{1}时将加载该文件in:
cd
在development.rb
中使用EMAIL=me@mysite.com
EMAIL_PASSWORD= mypassword
AND ENV['EMAIL']