Heroku/design-缺少主机链接! 请提供: host 参数或设置 default _ url _ options [ : host ]

我想把我的应用推到 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 中,我想是因为它是一个 Rails3应用程序)

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'

编辑(二)

当我在控制台上输入 heroku log 时,我得到了 this = = > 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'
94337 次浏览

你需要把这个加到你的 environment.rb

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

确保将 host更改为生产 URL,并将其保持为开发本地主机。这是为邮件,它需要一个默认的电子邮件发送通知,如确认等..。.


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

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

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

根据版本的不同,这应该放在 production.rb中,而不是 environment.rb中。

好吧,

首先,您必须使用以下命令行安装 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. 应该可以. 。

如果你在 雪松上跑步:

  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' }

Codeglot 上面的答案就足够了,但是我们想要一些更灵活的东西,所以我们这样做了:

在 Heroku,我们运行多个生产环境进行分段和测试,因此我们需要一个灵活的 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

为了让它在 制作环境下工作,我必须做很多事情: 在我的 production.rb文件(/config/environment/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"

这是 铁路4设计3

经过这么多的研究,还在工作的那个,

  1. 不要忘记在您的 ApplicationMailer (application _ mailer. rb)中添加默认的 发信人: 邮寄地址,

    class ApplicationMailer < ActionMailer::Base
    default from: 'yourmail@gmail.com'
    layout 'mailer'
    end
    
  2. Add the below configuration in your 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. Enable IMAP from your Gmail settings in Forwarding IMAP/POP tab.

  4. Allow less secure apps: ON from https://myaccount.google.com/lesssecureapps

You're now good to go. :)