设置ActiveStorage主机

时间:2019-04-09 19:55:34

标签: 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'

它非常适合静态资产!但是,ActiveStorage image_tag仍在使用正在查看站点的任何域,在本例中为www.example2.com

关于如何使其始终使用asset_host投放的想法?

1 个答案:

答案 0 :(得分:0)

使用ActiveStorage::Current.host来使用CurrentAttributesclass ApplicationController before_action do ActiveStorage::Current.host = 'https://example2.com' end end 是一种属性类型,可以在每个请求上设置/重置,并且可以在Rails应用中的任何地方使用:

ActiveStorage::Current.set

如果要在控制器外部使用它,请使用ActiveStorage::Current.set(host: "https://www.example2.com") do item.file_ttachments.first.service_url end 提供一个主机:

{
  "123": {
    "room_name": "Apartment #12",
    "room_nights_nb": 1,
    "room_night_price": "110.00"
  },
  "124": {
    "room_name": "House #24",
    "room_nights_nb": 2,
    "room_night_price": "125.00"
  }
}

发布参考文档:https://edgeapi.rubyonrails.org/classes/ActiveStorage/SetCurrent.html