Rails: 缺少链接的主机!请提供 :host 参数或设置 default_url_options[:host]。

237

我已经谷歌了大约90分钟,还是找不到答案。我在哪里设置default_url_options?我已经为config.action_mailer.default_url_options设置了它,以解决其他地方的同样错误,但现在在尝试在RSpec spec内使用URL辅助程序时出现此错误。我不知道它希望设置default_url_options在哪里。

 Failure/Error: listing_url(listing).should match(/\/\d+-\w+$/)
 RuntimeError:
   Missing host to link to! Please provide :host parameter or set default_url_options[:host]
 # ./spec/routing/listing_routing_spec.rb:9:in `block (3 levels) in <top (required)>'

这段代码与电子邮件/ActionMailer无关,只是需要一个URL而不是一个路径。

有什么想法吗?


主机到底是什么? - Jwan622
17个回答

4

以防万一有人在搜索与ActiveStorage相关的错误时找到了这个内容:

如果您有一个控制器动作,想要使用本地磁盘服务(最可能是在测试环境中)生成上传URL等,那么您需要在控制器中包含 ActiveStorage::SetCurrent,以使 blob.service_url_for_direct_upload 正常工作。


1
谢谢!我在控制器之外使用它(GraphQL直接上传变异),所以必须进行一些调整,但是它有效。我一直在寻找这个,再次感谢@phoet :) - Stan

3

这是一个很好的解决方案适用于Rails 4,因为它允许您根据需要设置特定于控制器的选项。 - Ibrahim

2

我遇到了同样的错误。我已经正确地编写了所有内容,包括教程中的列表10.13。

Rails.application.configure do
.
.
.
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delevery_method :test
host = 'example.com'
config.action_mailer.default_url_options = { host: host }
.
.
.
end

显然,“example.com”需要替换为我的服务器网址。

在教程中我忽略了这一行:

重启开发服务器以激活配置...

所以对于我来说,答案就是关闭服务器,然后再重新启动。


0

在路由中添加default_url并不是正确的解决方案,尽管它对某些情况有效。

您需要在每个环境(开发、测试、生产)中设置default_url。

您需要进行这些更改。

    config/environments/development.rb
     config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'

 config/environments/test.rb
      config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'

  config/environments/development.rb
     config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'

0

不想改变其他环境的行为,所以我使用了:

development.rb

Rails.application.configure do
...
end

Rails.application.default_url_options = Rails.application.config.action_mailer.default_url_options

适用于Rails 6。


0

Rails.application.config.action_mailer.default_url_options

config.action_mailer.default_url_options = { host: 'my.domain', protocol: 'https', port: 356 }

Rails.application.default_url_options

self.default_url_options = config.action_mailer.default_url_options

首先设置Action Mailer的默认URL选项(就像大多数答案中所示)
然后将这些选项分配给应用程序。最初的问题确切地涉及到这个配置!而不是关于邮件发送器:) 奇怪的是,问题很旧,但并不是所有的答案都设置了这个配置,并且没有提到简单的self赋值。
将这些行放入config/application.rb或特定环境中,例如config/environments/development.rb
之后,您可以像这样访问路由助手
Rails.application.routes.url_helpers.user_url(25)
# => "https://my.domain:356/users/25"

0

我通过配置environment.rb文件解决了这个问题,如下:

YourApp::Application.default_url_options = YourApp::Application.config.action_mailer.default_url_options

你需要针对每个环境(如开发、测试、预发布和生产等)设置action mailer的default_url_options。

参考:缺少链接主机!请提供:host参数或设置default_url_options[:host]


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