Heroku / devise-找不到要链接的主机!请提供:host参数或设置default_url_options [:host]


178

我正在尝试将我的应用程序推送到heroku。我仍然在开发中。我将设计与可确认模块一起使用。

当我尝试使用heroku控制台添加用户时,出现此错误:

Missing host to link to! Please provide :host parameter or set default_url_options[:host]

在测试和开发环境中,我有以下内容:

环境/development.rb和环境/test.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' }

我没有在生产环境中设置任何东西。

我试图推动

config.action_mailer.default_url_options = { :host => 'mywebsitename.com' }
config.action_mailer.default_url_options = { :host => 'heroku.mywebsitename.com' }

但这也行不通..

我在网上看到它可能与ActionMailer有关,但是我不知道必须配置什么。非常感谢您的想法!

编辑:

你好

为了避免在我按下heroku时我的应用程序崩溃,我将其放在env / test.rb和env / dev.rb中(不是在env.rb中,我认为这是因为它是Rails 3应用程序)

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

但是,当我尝试在heroku控制台中创建用户时:

User.create(:username => "test", :email => "test@test.com", :password => "test1234", :password_confirmation => "test1234", :confirmed_at => "2010-11-03 14:11:15.520128")

这是我得到的错误:

ActionView::Template::Error: Missing host to link to! Please provide :host parameter or set default_url_options[:host]
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:473:in `url_for'
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/url_for.rb:132:in `url_for'
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_view/helpers/url_helper.rb:99:in `url_for'
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:195:in `user_confirmation_url'

编辑(2)

当我在控制台上键入heroku log时,我得到了==> production.log <==所以我认为当一个部署在heroku上时,它已经在生产中。

我这样配置env / prod.rb:

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

现在,当我尝试创建用户时,我将其作为错误:

Errno::EAFNOSUPPORT: Address family not supported by protocol - socket(2)
/usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `initialize'
/usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `open'
/usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `do_start'
/usr/ruby1.8.7/lib/ruby/1.8/timeout.rb:62:in `timeout'

Answers:


243

您需要将此添加到您的 environment.rb

  config.action_mailer.default_url_options = { :host => 'localhost' }

确保更改host为生产URL,并将其保留为本地主机以进行开发。这是给邮件发件人的,它需要默认的电子邮件才能发出通知,例如确认等。


您应该检查heroku logs从控制台运行的heroku服务器上的日志,它将告诉您确切的错误。

当您推送到heroku时,您需要environment.rb使用heroku子域配置文件:

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

根据版本的不同,应该放入production.rb而不是environment.rb


你好山姆!对不起,我没明白。我只是在env.rb中添加了config.action_mailer.default_url_options = {:host =>'localhost'}行,但是我的rails 3应用程序在heroku上崩溃了。我也必须在env / prod.rb上放一些东西吗?(对不起,我的英语太一般了。)
benoitr

另外,我是否必须将Rails应用程序置于生产模式?谢谢!
benoitr

1
:host => 'yourapp.heroku.com' 这应该是您的域名。例如,如果您的域是yahoo.com,则应为,yahoo.heroku.com或者如果您已经设置了自定义域,则该域名将只是您的网址yahoo.com
thenengah 2010年

1
谢谢山姆,我找到了解决方案。事实是我没有sendgrid插件,而且我的smtp尚未配置。非常感谢您的备份!
benoitr

1
不是config.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com'正义,而是正义config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'吗?
maudulus 2014年

37

好,

首先,您必须使用以下命令行安装sendgrid gem:

heroku addons:add sendgrid:free

然后,您只需要像这样配置env / dev.rb和env / prod.rb:

env / dev.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' }

env / prod.rb

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

推送git和heroku。它应该工作..


当我在production.rb中引用config.action_mailer时收到此错误:/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/ rails / railtie / configuration.rb:77:in method_missing': undefined method #_Rails :: Application :: Configuration:0x0000000241f760>(NoMethodError)的
action_mailer

我不确定在这里可以帮到您...您是否在块内引用了它?(网站:: Application.configure做... config.action_mailer.default_url_options = {:host =>'yourapp.heroku.com'} ...结束)
benoitr 2011年

6
现在sendgrid命令为heroku addons:add sendgrid:starter(在devcenter.heroku.com/articles/sendgrid上查看使用情况详细信息)
Danny

23

上面的Codeglot的anwser可以完成这项工作,但是我们想要更灵活的东西,所以我们这样做:

在Heroku上,我们运行多个生产环境以进行登台和测试,因此我们需要针对production.rb环境文件的灵活解决方案。

在production.rb中

config.action_mailer.default_url_options = { :host => ENV['MAILER_URL'] }

然后像这样为您的应用设置MAILER_URL环境变量

heroku config:set MAILER_URL=my-awesome-app.herokuapp.com --app my-awesome-app

18

如果您在Cedar上运行:

  1. heroku addons:add sendgrid:free从控制台运行。

  2. config/environments/production.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

  config.action_mailer.default_url_options = { :host => 'YOUR-DOMAIN-HERE.COM' }

13

我必须做很多事情才能使其在生产环境中正常工作:在我的production.rb文件(/config/environments/production.rb)中,添加了以下内容:

Rails.application.routes.default_url_options[:host] = 'myappsname.herokuapp.com'
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default :charset => "utf-8"

这是与Rails 4Devise 3一起使用的


1
这种结构default_url_options导致错误,导致我的预编译资产失败,仅供参考。当我将其更改回`= {host:'myappsname.herokuapp.com'}`时,它起作用了。
丽兹

0

经过大量的研究工作

  1. 不要忘记在以下位置添加默认来自:您的ApplicationMailer(application_mailer.rb)中的邮件地址,

    class ApplicationMailer < ActionMailer::Base
      default from: 'yourmail@gmail.com'
      layout 'mailer'
    end
  2. 将以下配置添加到production.rb中

    config.action_mailer.default_url_options = 
      { :host => 'yourapp.herokuapp.com' }
    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
      address:              'smtp.gmail.com',
      port:                 587,
      domain:               'heroku.com',
      user_name:            'yourmail@gmail.com',
      password:             'yourgmailpassword',
      authentication:       'login',
      enable_starttls_auto: true
    }
  3. 在“ 转发IMAP / POP”标签中的Gmail设置中启用IMAP 。

  4. 允许安全性较低的应用程序:https://myaccount.google.com/lesssecureapps 启用

您现在可以出发了。:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.