У меня есть приложение rails, которое имеет несколько моделей с вложениями скрепки, которые все загружены на S3. Это приложение также имеет большой набор тестов, который выполняется довольно часто. Недостатком этого является то, что тонна файлов загружается в нашу учетную запись S3 на каждом тестовом прогоне, заставляя тестовый пакет работать медленно. Это также немного замедляет процесс разработки и требует, чтобы у вас было подключение к Интернету для работы над кодом.
Существует ли разумный способ установки механизма хранения скрепки на основе среды Rails? В идеале наши среды тестирования и разработки будут использовать локальное хранилище файловой системы, а рабочая среда будет использовать хранилище S3.
Я также хотел бы извлечь эту логику в общий модуль, так как у нас есть несколько моделей, которые будут нуждаться в этом. Я бы хотел избежать такого решения внутри каждой модели:
### We don't want to do this in our models...
if Rails.env.production?
has_attached_file :image, :styles => {...},
:path => "images/:uuid_partition/:uuid/:style.:extension",
:storage => :s3,
:url => ':s3_authenticated_url', # generates an expiring url
:s3_credentials => File.join(Rails.root, 'config', 's3.yml'),
:s3_permissions => 'private',
:s3_protocol => 'https'
else
has_attached_file :image, :styles => {...},
:storage => :filesystem
# Default :path and :url should be used for dev/test envs.
end
Обновление: Липкая часть заключается в том, что параметры вложения :path
и :url
должны различаться в зависимости от используемой системы хранения.
Любые советы или предложения будут очень благодарны!: -)