Каталог временных каталогов Carrierwave для загрузки/tmp
Я начал использовать Carrierwave, и я узнал, что он хранит временные файлы в нескольких местах в зависимости от того, тестирует ли он или задерживает работу.
Если это делается во время тестирования (rspec), файлы temp будут находиться в каталоге RAILS_ROOT/uploads/tmp
.
Если это сделано во время отложенного задания, временные файлы будут находиться в RAILS_ROOT/public/uploads/tmp
Во-первых, я думал, что rails_root/tmp/uploads
будет более разумным местом или даже временной папкой системы.
Во-вторых, тестирование, отличное от обычного, похоже на ошибку.
Есть ли способ исправить это (либо путем настройки, либо с помощью исправления обезьян)? И могу ли я поместить вещи в папку RAILS_ROOT/tmp?
Ответы
Ответ 1
Существует опция config.cache_dir
, которую вы можете установить в 'config/initializers/carrierwave.rb'. Но это относится к '/public'. Похоже, вы должны сделать это в своих загрузчиках:
class MyUploader < CarrierWave::Uploader::Base
def cache_dir
# should return path to cache dir
Rails.root.join 'tmp/uploads'
end
end
Ответ 2
Im использует несущую волну 0.10.0 и кажется, что это поведение было рассмотрено. Теперь параметр cache_dir
принимает путь, который находится за пределами общего каталога:
CarrierWave.configure do |config|
config.cache_dir = Rails.root.join 'tmp/uploads'
end
Ответ 3
Ответ @iKindred работал у меня, но я подумал, что буду расширять то, как я получил его для работы с Rails 4.2.3 с CarrierWave 0.10.0:
Где поставить блок конфигурации
Поскольку CarrierWave не является частью Rails, лучшее место для размещения блока configure, согласно моему чтению руководства Rails, является файл инициализации. Имя может быть выбрано произвольно, но оно должно находиться в Rails.root/config/initializers
. Я выбрал имя файла после модуля, который я настраивал: Rails.root/config/initializers/carrier_wave.rb
.
Что помещать в файл инициализации
Я обнаружил, что запускаю тесты, пока приложение Rails работает в режиме development
. После тестов я очищаю все файлы, отключая пути хранения, как описано здесь. Для этого, не работая с файлами, хранящимися в приложении Rails, работающем в режиме development
, пути хранения должны быть разделены средой! Поэтому моя модифицированная версия ответа @iKindred:
#config/initializers/carrier_wave.rb
CarrierWave.configure do |config|
config.cache_dir = File.join(Rails.root, 'tmp', 'uploads', Rails.env)
end