Rails 重新部署後 Active Storage 的圖片 404 Not Found

有 N 人看过

情況:

把 rails 專案部署到 production 後,原有在 production 的圖片會消失。Rails 專案本身有使用 Active Storage,但沒有儲存第三方,所以 develop 跟 production 都使用 :local。

storage.yml

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

production.rb

# Store uploaded files on the local file system (see config/storage.yml for options).
config.active_storage.service = :local

原因:

只有 storage 目錄下的東西被加進 gitignore, storage 本身並沒有被 ignore,所以每次 push 上去會推一個空的 storage 資料夾,而 production 的資料夾就會被蓋掉。

.gitignore

# Ignore uploaded files in development.
/storage/*

解法:

在 deploy.rb 下加入 “storage” 至 append :linked_dirs 。只要把 storage 指定為共享目錄,這樣子就不會被覆蓋了。

append :linked_dirs, "log", "sorage", "tmp/pids", "tmp/cache", "tmp/sockets", "public/system"

Reference: Rails 6 Active Storage Attachment 404 not found

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。