设置 ActiveStorage 主机

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 提供服务的想法?

Per*_*ell 9

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