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应用程序本身的原始主机吗?或者我忽略了什么明显的东西。
1条答案
按热度按时间uplii1fm1#
我有两个选择
1.首选。配置您的CDN指向您的Rails应用(/rails/active_storage/blobs/proxy/ endpoint),而不是直接指向存储桶。这种方法允许您不仅缓存上传,还可以缓存变体。看起来这是Rails开发人员更喜欢的方法,这可能是他们在文档中包含routes-snippet的原因。
1.如果您有特定的用例,并且需要通过S3(而不是通过应用)使用CDN,您可以通过以下方式配置路由:
所以你可以通过使用
cdn_image_url
helper得到直接链接