Я использую операторскую волну для обработки моих загрузок. Я указал store_dir следующим образом:
def store_dir
"uploads/#{Time.now.year}/#{Time.now.month}/#{Time.now.day}"
end
Загрузка файлов работает как шарм - каждый раз, когда я загружаю файл, он попадает в каталог, где он должен заканчиваться; то есть «сегодняшний каталог».
Когда я пытаюсь загрузить файл, CarrierWave динамически строит путь загрузки на основе параметров store_dir. Допустим, файл, который был загружен 1.12.2012, доступен по следующему пути на flysystem:
/uploads/2012/12/01/file.ext
будет получено несущей волной как:
/uploads/2012/12/12/file.ext
Что, очевидно, приводит к ошибке «Не удается прочитать файл».
Я пришел с двумя различными возможными решениями:
- Создайте отдельный файл, в котором я буду хранить фактический путь к файлу при его создании, а затем буду использовать это значение для извлечения файла.
- Перегрузите метод retrieve_from_store! (который является частью драгоценного камня несущей волны) и заставьте его построить путь на основе поля created_at из записи файла, а не из store_dir .
Я склоняюсь ко второму варианту, так как он не такой грязный. Тем не менее, оба чувствуют себя «не рельсами». Какой из них будет лучше использовать и почему? Или, может быть, Carrwave предлагает способ решить эту проблему?