Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

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      => 'xxx@example.com',
  :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      => 'xxx@example.com',
  :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.

share|improve this question
    
This is strange. I just got the same error and adding config.action_mailer.default_url_options = { :host => "example.com"; } to my application.rb resolved the issue... Are you sure your config is picked up correctly? –  valo Apr 22 '14 at 19:38

2 Answers 2

up vote 22 down vote accepted

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

Rails 4.1.x

Thanks to maudulus

# Default Mailer Host
  Rails.application.routes.default_url_options[:host] = 'domain.com'
share|improve this answer
2  
Thanks for the solution. I was able to load from an ENV variable. Rails 4.1.7. –  Mark Schneider Nov 24 '14 at 21:21
    
Awesome I'm glad that has been updated. Thanks for the comment. –  railrailrail Nov 24 '14 at 23:13

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

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.