ruby-on-rails 将CDN与ActiveStorage一起使用,ENV['CDN_HOST']应该是什么?

kgsdhlau  于 2023-05-30  发布在  Ruby
关注(0)|答案(1)|浏览(167)

bounty将在5天内到期。此问题的答案有资格获得+50声望奖励。Arslan Ali正在寻找一个答案从一个有信誉的来源

所以ActiveStorage工作得很好。
我现在已经在DigitalOcean Spaces上打开了CDN,并有一个个人子域,如:https://cdn.my-website.com
我一直在关注这个Rails官方文档,其中指出在config/routes.rb中有以下代码:

# config/routes.rb
direct :cdn_image do |model, options|
  if model.respond_to?(:signed_id)
    route_for(
  :rails_service_blob_proxy,
  model.signed_id,
  model.filename,
  options.merge(host: ENV['CDN_HOST'])
)
else
  signed_blob_id = model.blob.signed_id
  variation_key  = model.variation.key
  filename       = model.blob.filename

  route_for(
    :rails_blob_representation_proxy,
    signed_blob_id,
    variation_key,
    filename,
    options.merge(host: ENV['CDN_HOST'])
  )
end

结束
现在,问题是:调用cdn_image_url(user.profile_image)生成的URL如下所示:
“https://cdn.my-website.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TWpBME9EUmxNaTA0WVRobExUUmxORGd0T0RJellpMWtOMk5rWVRVMlpXTmpaV1VHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--322044941e3418863e6aeff7ce802d16afe7dfb0/profile_image.png“
这个URL将把请求发送到https://cdn.my-website.com/,那里没有托管Rails应用程序。我们不应该在这里使用指向Rails应用程序本身的原始主机吗?或者我忽略了什么明显的东西。

uplii1fm

uplii1fm1#

我有两个选择
1.首选。配置您的CDN指向您的Rails应用(/rails/active_storage/blobs/proxy/ endpoint),而不是直接指向存储桶。这种方法允许您不仅缓存上传,还可以缓存变体。看起来这是Rails开发人员更喜欢的方法,这可能是他们在文档中包含routes-snippet的原因。
1.如果您有特定的用例,并且需要通过S3(而不是通过应用)使用CDN,您可以通过以下方式配置路由:

direct :cdn_image do |blob|
  File.join(ENV['CDN_HOST'], blob.key)
end

所以你可以通过使用cdn_image_url helper得到直接链接

相关问题