缺少要链接的主机!(针对Devise)

12

我安装了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个回答

13

config/ 目录下的文件在开发环境下不会自动重新加载。如果您对此文件进行了更改,请确保您已经重启了Rails服务器和任何Rails控制台会话,以便更改生效。


我也不得不重新启动Unicorn。 - Zack Burt

4

继承您的应用程序的default_url_optionsActionMailer

默认情况下,您在环境文件(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实际上使用与你应用程序的其他部分不同的主机和端口,否则你不想这样做。
为了解决这个问题(并保持尽可能DRY),你可以自动将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

这将解决你的问题,并自动设置你的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"}

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
请将以下内容添加到config/environment.rb文件的末尾行:
Rails.application.routes.default_url_options[:host] = 'yourhost.com'

这不仅是action_mailer的问题,还包括为routes设置默认主机。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接