Mik*_*ogg 4 ruby-on-rails rails-activestorage
现在,我有一个设置,允许用户使用 CNAME 将他们的应用程序直接指向我的 Rails 应用程序(也称为指向www.example.com托管在 的我的应用程序www.example2.com)。
一切都很棒!但是,我想使用我的应用程序www.example2.com作为主机来提供图像(出于 CDN 原因)。
ActiveStorage 似乎默认(并强制...)主机为当前主机,并且不允许我更改它。
我有:
config.action_controller.asset_host = 'https://www.example2.com'
Rails.application.routes.default_url_options[:host] = 'https://example2.com'
Run Code Online (Sandbox Code Playgroud)
它对于静态资源非常有用!但是,image_tag在本例中,ActiveStorage 仍然使用正在查看的站点所在的任何域www.example2.com。
关于如何使其始终使用 asset_host 提供服务的想法?
UseActiveStorage::Current.host它利用CurrentAttributes,一种在每个请求上设置/重置的属性,并且可以在 Rails 应用程序中的任何地方使用:
class ApplicationController
before_action do
ActiveStorage::Current.host = 'https://example2.com'
end
end
Run Code Online (Sandbox Code Playgroud)
如果您想在控制器外部使用它,请使用ActiveStorage::Current.set提供主机:
ActiveStorage::Current.set(host: "https://www.example2.com") do
item.file_ttachments.first.service_url
end
Run Code Online (Sandbox Code Playgroud)
Rails 参考文档:https://edgeapi.rubyonrails.org/classes/ActiveStorage/SetCurrent.html