正在 Google App Engine 上的 Rails 应用上的 Ruby 的 Google 云存储加载图像

Loading images from Google Cloud Storage for Ruby on Rails app on Google App Engine

我有一个 Ruby on Rails Web 应用程序(部署在 Google App Engine 上)使用 Spree/Solidus 核心,连接到 Google Cloud用于文件存储的存储。我们的应用程序有一个管理仪表板,我们可以在其中上传与对象相关的图像,并且我们有一个网页来显示这些图像。我们最近部署项目的时候,一开始可以看到图片,但是过一段时间就显示不出来了! 对于控制台上显示的图像,我们收到以下 400 错误:

Failed to load resource: the server responded with a status of 400 ()

当我们检查管理仪表板时,相同的图像仍然可见,但它们在主页上显示为已损坏。 我们的 Google Cloud Storage 存储桶具有 public 访问权限(尽管我不认为它真的需要它,因为应用程序在同一个项目中并且我们有 GC_access JSON文件已部署)。

我们使用以下代码来显示图像:

<% if image_url = image.try(:url, size)  %>
  <%= image_tag image_url %>
<% else %>
  <span class="image-placeholder <%= size %>"></span>
<% end %>

对于解决此问题的任何帮助或建议,我将不胜感激!我不确定还有哪些其他信息可能有用,但如果您认为有关某事的更多信息可能有用,我可以添加更多详细信息。

您可以检查多项内容,以确保您的图片正确获准公开分享。第一个是启用 Bucket Uniform Level Access. This type of access is general for all the objects in your bucket instead of per-object ACLs, and the objects should be set for public access. The next thing to verify is whether the image URLs are being correctly created for public viewing, according to the documentation,URL 的格式应为:

https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME

如果你的 URL 有一长串数据,可能是因为你正在使用 signed URLs on your website. These URLs have an expiration date, which could explain why they seem to have worked at first and then they stopped showing up for the public. In the ActiveStorage documentation,它表示 config/storage.yml 文件将默认为私有访问,方法是创建签名URLs:

By default, Active Storage assumes private access to services. This means generating signed, single-use URLs for blobs. If you'd rather make blobs publicly accessible, specify public: true in your app's config/storage.yml

这个相关的 还讨论了 URLs 到期和签名 URLs。