ActiveStorage великолепен, но если вам нужно несколько типов сервисов для каждой среды, он в настоящее время не будет работать для вас (как упоминал Джордж Клагхорн выше).Если вам нужен альтернативный вариант, я решил эту проблему с помощью Shrine .
. Хитрость заключается в настройке нескольких «хранилищ» в инициализаторе:
# config/initializers/shrine.rb
Shrine.storages = {
cache: Shrine::Storage::FileSystem.new('storage', prefix: 'uploads/cache'),
pdf_files: Shrine::Storage::FileSystem.new('storage', prefix: 'uploads'),
images: Shrine::Storage::S3.new(**s3_options)
}
Изатем используйте плагин default_storage в каждом загрузчике (который вы подключаете к данной модели).Обратите внимание, что это не будет работать, если вы не укажете default_storage в обоих загрузчиках:
class PdfFileUploader < Shrine
plugin :default_storage, cache: :cache, store: :pdf_files
end
class ImageFileUploader < Shrine
plugin :default_storage, cache: :cache, store: :images
end