“缺少主机链接!”对于Devise

时间:2011-07-10 03:16:30

标签: ruby-on-rails devise

我安装了Devise,每当我尝试创建一个帐户时,事情就会停止。

完整错误如下:

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

我在development.rb块中有以下代码。我已经尝试过,无需添加smtp配置。

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

我是否错误地定义了host

4 个答案:

答案 0 :(得分:13)

config /下的文件不会在开发中自动重新加载。如果您对此文件进行了更改,请确保已重新启动Rails服务器,并且任何Rails控制台会话都将使更改生效。

答案 1 :(得分:3)

动态设置它解决了问题。

  # application_controller.rb
  before_filter :mailer_set_url_options

  ...

  def mailer_set_url_options
    ActionMailer::Base.default_url_options[:host] = request.host_with_port
  end

我意识到这种配置不按惯例属于控制器,但出于开发目的,似乎就足够了。我总是可以将其编码到生产环境配置中。

答案 2 :(得分:1)

添加到文件末尾config/environment.rb行:

Rails.application.routes.default_url_options[:host] = 'yourhost.com'

action_mailer不仅存在问题,而且还为routes设置默认主机。

答案 3 :(得分:1)

default_url_options继承您的应用程序ActionMailer

默认情况下,您在环境文件default_url_optionsconfig.action_mailer等中为development.rb设置的production.rb不会被用作{{1你的default_url_options作为一个整体。

Application

因此,当您尝试在邮件程序之外使用需要主机和端口(例如url)的任何内容时,它不知道该怎么做。

您可以通过在同一环境的多个位置对主机和端口进行硬编码来解决此问题,但除非$ MyApp::Application.config.action_mailer.default_url_options #=> {:host=>"lvh.me", :port=>"3000"} $ MyApp::Application.default_url_options #=> {} 实际使用了,否则您不希望这样做与ActionMailer的其余部分不同的主机和端口。

要解决此问题(并尽可能保持干净),您可以自动使用Application作为整个config.action_mailer.default_url_options Application

只需将以下行添加到您的default_url_options文件中(将config/environment.rb更改为您应用的名称):

MyApp

这样可以解决您的问题,并自动将# Set the default host and port to be the same as Action Mailer. MyApp::Application.default_url_options = MyApp::Application.config.action_mailer.default_url_options Application设置为与default_url_options相同:

config.action_mailer.default_url_options