【发布时间】:2018-12-09 04:23:52
【问题描述】:
我有一个基本的 ActiveStorage 设置,其中一个型号为has_many_attached :file_attachments。在其他地方的服务中,我试图生成一个在主应用程序(电子邮件、工作等)之外使用的链接。
在生产中使用 S3 我可以:
item.file_attachments.first.service_url 我得到了一个指向 S3 存储桶+对象的适当链接。
我无法使用 rails 指南中规定的方法:Rails.application.routes.url_helpers.rails_blob_path(item.file_attachments.first)
它的错误是:
ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
我可以将host: 'http://....' 参数传递给它,它很高兴虽然它仍然没有生成完整的URL,只是路径。
开发中我正在使用磁盘支持的文件存储,我不能使用任何一种方法:
> Rails.application.routes.url_helpers.rails_blob_path(item.file_attachments.first)
ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
在此处设置主机也不会生成完整的 URL。
在生产中service_url 有效,但是在开发中我得到了错误:
> item.file_attachments.first.service_url
ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
指定主机也无济于事:
item.file_attachments.first.service_url(host:'http://localhost.com')
ArgumentError: unknown keyword: host
我也试过添加
config.action_mailer.default_url_options = { :host => "localhost:3000" }
config.action_storage.default_url_options = { :host => "localhost:3000" }
Rails.application.routes.default_url_options[:host] = 'localhost:3000'
没有成功。
我的问题是 - 我怎样才能以一种适用于开发和生产的方式获取完整的 URL? 或者我应该将主机设置在哪里?
【问题讨论】:
-
这里有更多关于这个主题的信息github issue