Rails action_mailer 配置在生产中不起作用
Rails action_mailer config not working in production
我正在尝试使用 Rails 4.1.0 设置 action_mailer 来发送电子邮件。
在我的 config/environments/{env}.rb 中,我有:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.mandrillapp.com',
port: 587,
domain: 'domain.com',
authentication: 'login',
user_name: 'email@domain.com',
password: 'pass',
enable_starttls_auto: true }
它在开发中运行良好,但在生产中它正在尝试连接到本地主机。
m = Mail.new
m.delivery_method
=> #<Mail::SMTP:0xbd79fdac @settings={:address=>"localhost", :port=>25, :domain=>"localhost.localdomain", :user_name=>nil, :password=>nil, :authentication=>nil, :enable_starttls_auto=>true, :openssl_verify_mode=>nil, :ssl=>nil, :tls=>nil}>
但是当我这样做时 "puts Rails.application.config.action_mailer" 我得到了正确的配置
{:raise_delivery_errors=>false, :default_url_options=>{:host=>"domain.com"}, :delivery_method=>:smtp, :smtp_settings=>{:address=>"smtp.mandrillapp.com", :port=>587, :domain=>"domain.com", :authentication=>"login", :user_name=>"email@domain.com", :password=>"password", :enable_starttls_auto=>true}, :assets_dir=>"xxx", :javascripts_dir=>"xxx", :stylesheets_dir=>"xxx", :asset_host=>nil, :relative_url_root=>nil}
有什么想法吗?
您需要为 production.rb
文件中的 default_url_options
哈希添加 host
选项,如下所示:
config.action_mailer.default_url_options = { :host => ENV['HOST_DEFAULT_URL'],
only_path: false }
这应该可以解决问题。
默认情况下,Mail gem 不会使用您的 ActionMailer 配置。 ActionMailer 使用邮件,但这些配置设置仅在您通过 ActionMailer 发送邮件时适用。
如果它在您的开发模式下工作,那么您肯定已经在您的 development.rb 环境文件或特定于环境的初始化程序中单独配置了邮件 gem。
我忘了我的 development.rb
中有这个配置
Mail.defaults do
delivery_method Rails.configuration.action_mailer.delivery_method, Rails.configuration.action_mailer.smtp_settings
end
我正在尝试使用 Rails 4.1.0 设置 action_mailer 来发送电子邮件。
在我的 config/environments/{env}.rb 中,我有:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.mandrillapp.com',
port: 587,
domain: 'domain.com',
authentication: 'login',
user_name: 'email@domain.com',
password: 'pass',
enable_starttls_auto: true }
它在开发中运行良好,但在生产中它正在尝试连接到本地主机。
m = Mail.new
m.delivery_method
=> #<Mail::SMTP:0xbd79fdac @settings={:address=>"localhost", :port=>25, :domain=>"localhost.localdomain", :user_name=>nil, :password=>nil, :authentication=>nil, :enable_starttls_auto=>true, :openssl_verify_mode=>nil, :ssl=>nil, :tls=>nil}>
但是当我这样做时 "puts Rails.application.config.action_mailer" 我得到了正确的配置
{:raise_delivery_errors=>false, :default_url_options=>{:host=>"domain.com"}, :delivery_method=>:smtp, :smtp_settings=>{:address=>"smtp.mandrillapp.com", :port=>587, :domain=>"domain.com", :authentication=>"login", :user_name=>"email@domain.com", :password=>"password", :enable_starttls_auto=>true}, :assets_dir=>"xxx", :javascripts_dir=>"xxx", :stylesheets_dir=>"xxx", :asset_host=>nil, :relative_url_root=>nil}
有什么想法吗?
您需要为 production.rb
文件中的 default_url_options
哈希添加 host
选项,如下所示:
config.action_mailer.default_url_options = { :host => ENV['HOST_DEFAULT_URL'],
only_path: false }
这应该可以解决问题。
默认情况下,Mail gem 不会使用您的 ActionMailer 配置。 ActionMailer 使用邮件,但这些配置设置仅在您通过 ActionMailer 发送邮件时适用。
如果它在您的开发模式下工作,那么您肯定已经在您的 development.rb 环境文件或特定于环境的初始化程序中单独配置了邮件 gem。
我忘了我的 development.rb
中有这个配置Mail.defaults do
delivery_method Rails.configuration.action_mailer.delivery_method, Rails.configuration.action_mailer.smtp_settings
end