Rails, CarrierWave и Fog - игнорируйте отсутствующие файлы при уничтожении или перезаписи

StackOverflow https://stackoverflow.com/questions/7354228

Вопрос

Как правильный способ в Rails W CarrierWave с использованием FOG для удаления/уничтожения записей, когда есть отсутствующие вложения/изображения?

Я пытаюсь очистить несколько записей после отсутствующего импорта изображений в Rackspace. Есть несколько пропущенных изображений и больших пальцев. Когда я пытаюсь удалить запись, я получаю ошибку

Fog :: Storage :: Rackspace :: notfound

Существует ли настройка перевозки или туман, чтобы сделать его более терпимым к подобным сценариям?

Это было полезно?

Решение

Я только что столкнулся с этой проблемой и обнаружил, что оригинальная проблема подана здесь: https://github.com/jnicklas/carrierwave/issues/481 и страница вики, описывающая исправление здесь: https://github.com/jnicklas/carrierwave/wiki/how-to%3a-silly-ignore-missing-files-on-destroy-or-overwrite

Однако я не был доволен решением, я не хотел добавлять эти 2 метода во все мои модели, которые используют загрузчик. Я склонен писать 1 базовый загрузчик и подкласс, которые для любых изменений в конкретных потребностях. Поэтому я выкопал эти методы: удалить _#{colun_name}! и remove_previound_storde _#{column_name} и найдена тема здесь: https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#l204 а также https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#l204

Оба эти метода просто вызовут удалить! на загрузчике. Поэтому самый простой способ решить проблему - это переопределить удаление! Метод в загрузке. Тогда вам нужно только переопределить один метод и в 1 месте. Мой переполнение выглядит следующим образом:

class CloudfilesUploader < CarrierWave::Uploader::Base
  # Override to silently ignore trying to remove missing previous file
  def remove!
    begin
      super
    rescue Fog::Storage::Rackspace::NotFound
    end
  end
end

Это должно решать ваши проблемы при попытке повторной загрузки изображения и перезаписать изображение, которое не существует, или когда вы просто пытаетесь удалить изображение, которое не существует.

~ Том

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top