“缺少主机链接到!”为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
设置默认主机。
从ActionMailer
inheritance您的应用程序的default_url_options
。
默认情况下,您在环境文件( development.rb
, production.rb
等)中为config.action_mailer
设置的default_url_options
不会被用作整个Application
的default_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
作为整个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
相同:
$ MyApp::Application.config.action_mailer.default_url_options #=> {:host=>"lvh.me", :port=>"3000"} $ MyApp::Application.default_url_options #=> {:host=>"lvh.me", :port=>"3000"}
- RVM命令:source~ / .rvm / scripts / rvm
- Rails:未定义的方法’paginates_per’
- 查找rails 3中没有关联记录的记录
- 在Rails 3中处理多租户的最佳方法
- BCrypt :: Errors :: InvalidSalt:无效的盐设计
- 如何构建Rails POST方法的邮递员请求
- Rails路由匹配查询参数
- 一个来自Destroy动作的Redirect_to总是得到DELETE动词:我声明的方法
- carrierwave,Excon :: Errors :: MovedPermanently in RegistrationsController #update error