我有一個使用 Spree/Solidus 核心的 Ruby on Rails Web 應用程式(部署在 Google App Engine 上),它連接到 Google Cloud Storage 以進行檔案存盤。我們的應用程式有一個管理儀表板,我們可以在其中上傳與物件相關的影像,并且我們有一個網頁可以顯示這些影像。當我們最近部署專案時,影像首先顯示,但一段時間后它們無法顯示!對于控制臺上顯示的影像,我們收到以下 400 錯誤:
Failed to load resource: the server responded with a status of 400 ()
當我們檢查管理儀表板時,相同的影像仍然可見,但它們在主頁上顯示為損壞。我們的 Google Cloud Storage 存盤桶具有公共訪問權限(盡管我認為它并不真正需要它,因為該應用程式在同一個專案中并且我們部署了 GC_access JSON 檔案)。
我們使用以下代碼來顯示影像:
<% if image_url = image.try(:url, size) %>
<%= image_tag image_url %>
<% else %>
<span class="image-placeholder <%= size %>"></span>
<% end %>
對于嘗試解決此問題的任何幫助或建議,我將不勝感激!我不確定還有哪些其他資訊可能會有所幫助,但如果您認為有關某事的更多資訊會有所幫助,我可以添加更多詳細資訊。
uj5u.com熱心網友回復:
您可以檢查多項內容,以確保您的影像被正確允許公開共享。第一個是啟用 Bucket Uniform Level Access。這種型別的訪問適用于您存盤桶中的所有物件,而不是針對每個物件的 ACL,并且應將物件設定為公共訪問。接下來要驗證的是是否正確創建了影像 URL 以供公眾查看,根據檔案,URL 應采用以下格式:
https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME
如果您的 URL 包含一長串資料,則可能是您在網站上使用了簽名 URL。這些 URL 有一個到期日期,這可以解釋為什么它們起初似乎有效,然后它們停止向公眾顯示。在 ActiveStorage檔案中,它說該config/storage.yml檔案將通過創建簽名 URL 來默認為私有訪問:
默認情況下,Active Storage 承擔對服務的私有訪問。這意味著為 blob 生成簽名的、一次性使用的 URL。如果您想讓 blob 可公開訪問,請在應用程式的 config/storage.yml 中指定 public: true
這個相關的SO 執行緒還討論了 URL 過期和簽名 URL。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/326282.html
標籤:红宝石轨道 红宝石 谷歌应用引擎 谷歌云存储 rails-activestorage
上一篇:當nuxt.js(vue.js)中的路由改變時,Facebook分享按鈕消失
下一篇:AppEngine部署失敗并顯示“致命:無法訪問‘https://gopkg.in/yaml.v3/’:服務器證書驗證失敗。”
