ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true

20,457

Solution 1

In the end I added the following with the correct value to each environment file:

test.rb / development.rb / production.rb

Devise 3.2.x - 4.x.x

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

Thanks to maudulus

# Default Mailer Host
  Rails.application.routes.default_url_options[:host] = 'domain.com'

Solution 2

Try restarting the server. Even in Rails 4.1 the config is not reparsed without a restart.

Share:
20,457
Chuanpin Zhu
Author by

Chuanpin Zhu

Updated on October 11, 2020

Comments

  • Chuanpin Zhu
    Chuanpin Zhu over 3 years

    My ruby on rails action mailer runs all good in development environment, but in production environment, it keeps throw:

    ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
    

    My development config is

    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
      :port           => xxx,
      :address        => 'smtp.example.org',
      :user_name      => '[email protected]',
      :password       => 'xxxxxxxx',
      :domain         => 'xxxxxx.com',
      :authentication => :plain,
    }
    
    config.action_mailer.default_url_options = { :host => 'localhost:3000' }
    

    My production config is

    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
      :port           => 587,
      :address        => 'smtp.example.org',
      :user_name      => '[email protected]',
      :password       => 'xxxxxx',
      :domain         => 'example.com',
      :authentication => :plain,
    }
    config.action_mailer.default_url_options = { :host => 'example.com' }
    

    My other environments are:

    ruby 2.1.1
    rails 4.0.3
    sidekiq 
    devise
    devise-async
    

    I have tried:

    1. Add the following in a initializer file

      ActionMailer::Base.default_url_options[:host] = "example.com"
      
    2. This answer here

    Neither of them works.