“缺少主机链接到!”为Devise

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

完整错误如下:

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

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

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

我是否错误地定义了host

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

动态设置可以解决问题。

  # 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 

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

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

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

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

ActionMailerinheritance您的应用程序的default_url_options

默认情况下,您在环境文件( development.rbproduction.rb等)中为config.action_mailer设置的default_url_options不会被用作整个Applicationdefault_url_options

 $ MyApp::Application.config.action_mailer.default_url_options #=> {:host=>"lvh.me", :port=>"3000"} $ MyApp::Application.default_url_options #=> {} 

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

您可以通过在同一环境的多个位置对主机和端口进行硬编码来解决此问题,但除非您的ActionMailer 实际使用与其他Application不同的主机和端口,否则您不希望这样做。

要解决此问题(并尽可能保持DRY),您可以自动使用config.action_mailer.default_url_options作为整个Applicationdefault_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 

这将解决您的问题,并自动将您的Applicationdefault_url_options设置为与config.action_mailer.default_url_options相同:

 $ MyApp::Application.config.action_mailer.default_url_options #=> {:host=>"lvh.me", :port=>"3000"} $ MyApp::Application.default_url_options #=> {:host=>"lvh.me", :port=>"3000"}