Использование нескольких Rails ActiveStorage Services - PullRequest
0 голосов
/ 18 мая 2018

Я использую ActiveStorage для загрузки PDF-файлов и изображений.PDF-файлы должны храниться локально из-за некоторых проблем конфиденциальности, а изображения должны храниться с помощью Amazon S3.Тем не менее, похоже, что ActiveStorage поддерживает установку только одного типа службы для среды (если только вы не используете функцию зеркала, которая в этом случае не выполняет то, что мне нужно) .

IsЕсть ли способ использовать различные сервисные конфигурации в одной среде?Например, если модель has_one_attached pdf использует локальный сервис:

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

А если другая модель has_one_attached image использует сервис amazon:

amazon:
  service: S3
  access_key_id: ""
  secret_access_key: ""

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

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
0 голосов
/ 19 мая 2018

Извините, боюсь, Active Storage не поддерживает это.

...