Я использую гем shrine для хранения изображений в S3 от Ruby on Rails.
Как я могу заставить храм вести себя следующим образом?
1. When uploading files from Frontend, they are stored in S3.
2. When deleting files from Frontend, they are deleted from Database, "but not deleted from S3"
То есть, когда я загружаю изображения в S3, они никогда не удаляются действиями пользователей.
Я нашел аналогичный вопрос, но что я хочу понимаете, это совершенно противоположное условие.
Нынешнее состояние таково.
Я загрузил святыню в ImageUploader в соответствии с docs.
При загрузке файла они сохраняются в S3. И когда я пытаюсь удалить файлы из базы данных, они также удаляются из S3.
Это блок кода, который загружает файлы в S3 и удаляет их из S3.
config/initializers/shrine.rb
require "shrine"
require "shrine/storage/file_system"
require "shrine/storage/s3"
s3_options = {
access_key_id: ENV[ACCESS_KEY_ID],
secret_access_key: ENV[SECRET_ACCESS_KEY],
region: ENV[REGION],
bucket: ENV[BUCKET],
}
Shrine.storages = {
cache: Shrine::Storage::S3.new(prefix: ..., **s3_options),
store: Shrine::Storage::S3.new(prefix: ..., **s3_options),
}
Shrine.plugin :activerecord
Shrine.plugin :cached_attachment_data
Shrine.plugin :restore_cached_data
Shrine.plugin :url_options,
cache: { public: true, host: ENV[CLOUDFRONT_URL] },
store: { public: true, host: ENV[CLOUDFRONT_URL] }
На ImageUploader < Shrine
установите логику изменения размера. А на модели Photo
смонтировать загрузчик как include ImageUploader::Attachment(:image)
При удалении файлов из базы данных я использовал ActiveRecord вот так (на данный момент они также удаляются из S3)
class PhotoController < ApiController
def destroy
photo = Photo.find(params[:id])
photo.destroy!
render json: photo, serializer: PhotoSerializer
end