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)
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)