ActionView :: Template ::错误:缺少链接到的主机!请提供:host参数,设置default_url_options [:host],或将:only_path设置为true

Chu*_*Zhu 26 production actionmailer devise ruby-on-rails-4

我的ruby on rails动作邮件程序在开发环境中运行良好,但在生产环境中,它会保持抛出:

ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
Run Code Online (Sandbox Code Playgroud)

我的开发配置是

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :port           => xxx,
  :address        => 'smtp.example.org',
  :user_name      => 'xxx@example.com',
  :password       => 'xxxxxxxx',
  :domain         => 'xxxxxx.com',
  :authentication => :plain,
}

config.action_mailer.default_url_options = { :host => 'localhost:3000' }
Run Code Online (Sandbox Code Playgroud)

我的生产配置是

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :port           => 587,
  :address        => 'smtp.example.org',
  :user_name      => 'xxx@example.com',
  :password       => 'xxxxxx',
  :domain         => 'example.com',
  :authentication => :plain,
}
config.action_mailer.default_url_options = { :host => 'example.com' }
Run Code Online (Sandbox Code Playgroud)

我的其他环境是:

ruby 2.1.1
rails 4.0.3
sidekiq 
devise
devise-async
Run Code Online (Sandbox Code Playgroud)

我试过了:

  1. 在初始化文件中添加以下内容

    ActionMailer::Base.default_url_options[:host] = "example.com"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这个回答在这里

它们都不起作用.

bln*_*lnc 78

最后,我为每个环境文件添加了以下正确的值:

test.rb/development.rb/production.rb

设计3.2.x - 4.xx

Rails 4.1.x && Rails 4.2.x && Rails 5.xx

感谢maudulus

# Default Mailer Host
  Rails.application.routes.default_url_options[:host] = 'domain.com'
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的解决方案.我能够从ENV变量加载.Rails 4.1.7. (3认同)
  • 这对我来说是Rails 5.0.0和Devise 4.2.0的正确答案 (2认同)