Подтвердить что ты не робот

Каталог временных каталогов Carrierwave для загрузки/tmp

Я начал использовать Carrierwave, и я узнал, что он хранит временные файлы в нескольких местах в зависимости от того, тестирует ли он или задерживает работу.

Если это делается во время тестирования (rspec), файлы temp будут находиться в каталоге RAILS_ROOT/uploads/tmp.

Если это сделано во время отложенного задания, временные файлы будут находиться в RAILS_ROOT/public/uploads/tmp

Во-первых, я думал, что rails_root/tmp/uploads будет более разумным местом или даже временной папкой системы.

Во-вторых, тестирование, отличное от обычного, похоже на ошибку.

Есть ли способ исправить это (либо путем настройки, либо с помощью исправления обезьян)? И могу ли я поместить вещи в папку RAILS_ROOT/tmp?

4b9b3361

Ответ 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