У меня есть приложение 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
вложения должны различаться в зависимости от того, какая система хранения используется.
Будем признательны за любые советы или предложения! :-)