Rails ActiveStorage / Cloudinary 未将图像请求重定向到 HTTPS

Rails ActiveStorage / Cloudinary Not Redirecting Image Request to HTTPS

ActiveStorage image_url 助手为 Rails 网络服务器上的图像生成一个 URL。当在 Web 服务器上收到该请求时,它会被重定向到 Cloudinary 上的 URL 以请求图像。 ActiveStorage 正在使用 https 协议生成图像 URL,但 Rails Web 服务器正在使用 http(无 ssl)协议为 Cloudinary 生成图像 URL。我无法确定原因。

请求日志:

Started GET "/rails/active_storage/blobs/really_long_hash/user-2.png"
Processing by ActiveStorage::BlobsController#show as JPEG
Parameters: {"signed_id"=>"really_long_hash", "filename"=>"nsi-site-bg"}
ActiveStorage::Blob Load (0.8ms) SELECT "active_storage_blobs".* FROM "active_storage_blobs" WHERE "active_storage_blobs"."id" =  LIMIT  [["id", 48], ["LIMIT", 1]]
Cloudinary Storage (4.3ms) Generated URL for file at key: cloudinary_file_name (http://res-4.cloudinary.com/hcfhlrdjg/image/upload/cloudinary_file_name.jpg)
Redirected to http://res-4.cloudinary.com/hcfhlrdjg/image/upload/cloudinary_file_name.jpg
Completed 302 Found in 48ms (ActiveRecord: 13.8ms)

cloudinary.yml

development:
  cloud_name: <%= ENV['CLOUDINARY_CLOUD_NAME'] %>
  api_key: <%= ENV['CLOUDINARY_API_KEY'] %>
  api_secret: <%= ENV['CLOUDINARY_API_SECRET'] %>
  secure: true
  cdn_subdomain: true
production:
  cloud_name: <%= ENV['CLOUDINARY_CLOUD_NAME'] %>
  api_key: <%= ENV['CLOUDINARY_API_KEY'] %>
  api_secret: <%= ENV['CLOUDINARY_API_SECRET'] %>
  secure: true
  cdn_subdomain: true
test:
  cloud_name: <%= ENV['CLOUDINARY_CLOUD_NAME'] %>
  api_key: <%= ENV['CLOUDINARY_API_KEY'] %>
  api_secret: <%= ENV['CLOUDINARY_API_SECRET'] %>
  secure: true
  cdn_subdomain: true

我刚刚将 cloudinary gem 更新到 1.13.0,但没有看到任何变化。如果您还需要什么,请告诉我。

Cloudinary gem 提供了一个 cl_image_tag 帮助程序,它生成一个 HTML img 标签,link 直接到 Cloudinary 服务器上的图像

您应该更喜欢使用此助手而不是 ActiveStorage url 助手,因为此助手标签会直接 link 生成图像而不是 link 到您的服务器。通过直接从 Cloudinary 访问图像,您可以获得使用 CDN 的全部好处。要获得 https,只需在标签中指定 secure: true

例如:如果您有一个 User 记录 has_one_attached :file。您可以像这样使用 cl_image_tag

cl_image_tag(user.file.key, secure: true)