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