链接丢失!请提供“:host”参数,适用于Rails 4中的主机。

25

缺少链接的主机名!请提供:host参数,设置 default_url_options[:host] 或将 :only_path 设置为 true。

有时我会随机遇到这个错误,通常重新启动服务器一段时间就可以解决问题,然后它又会出现。
我已经在 development 和 test.rb 文件中添加了 config.action_mailer.default_url_options = "localhost:3000"

此外,我在一个模块中使用了 include Rails.application.routes.url_helpers 来访问路由,我读到这可能是我遇到这些错误的原因,但是如果删除这些内容,我将无法访问路由。
该模块是为 datatables gem 编写的。


你最终做了什么,@raunak Joneja? - damuz91
可能是重复的问题,参考缺少链接主机!请提供:host参数或设置default_url_options[:host] - Teemu Leisti
4个回答

43

对于Rails 5,请使用:

Rails.application.routes.default_url_options[:host] = "XXX"

你可以将此放在config/environments/文件(或任何其他初始化程序)中,或者例如在config/routes.rb的开头处。


1
你会把它添加到哪里?在 config/environments/<env>.rb 中吗? - Felix
1
您可以在任何您认为合适的地方使用它。它可以是环境文件。通常,我最终会得出相同的语句(从环境变量中读取主机值),因此,我将这行放在 routes.rb 的顶部,因为它是定义/设置 Rails.application.routes 的文件。 - David

24

你应该以以下方式编写:

用于开发(development.rb)

config.action_mailer.default_url_options = { :host => "localhost:3000" }

在生产环境(production.rb)中

 config.action_mailer.default_url_options = { :host => "myproductionsite.com" }

1
没有起作用,将action_mailer更改为控制器,将值设置为哈希,检查了我的Heroku控制台,仍然出现相同的错误:'ActionView :: Template :: Error(缺少链接到的主机!请提供:host参数,设置default_url_options [: host]或将:only_path设置为true):'生产主机:{:host =>“myherokuapp.herokuapp.com”} - Raunak Joneja
你为什么要改变 action_controller? - Rajarshi Das

14

我遇到了类似的错误。问题出在你的配置上。

尝试像这样重新编写你的 development.rb 和 test.rb 配置:

config.action_mailer.default_url_options = { host: "localhost", port: 3000 }

还要检查您的production.rb配置是否正确编写如下:

config.action_mailer.default_url_options = { host: 'myherokuapp.herokuapp.com' }

7
你已经更新了邮件发送器的默认URL选项。URL助手将从action_controller设置中获取选项。 config.action_controller.default_url_options = ..... 谢谢!

另外,url选项是一个哈希表,而不是一个字符串。 - Sergio Tulentsev
1
没有起作用,将action_mailer更改为控制器,将值设置为哈希,检查了我的Heroku控制台,出现了相同的错误:'ActionView :: Template :: Error(缺少链接到的主机!请提供:host参数,设置default_url_options [: host]或将:only_path设置为true):'生产主机:{:host =>“myherokuapp.herokuapp.com”} - Raunak Joneja

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