我安装了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
?
答案 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_options
,config.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