Rails, CarrierWave и Fog - игнорировать отсутствующие файлы при уничтожении или перезаписи - PullRequest
3 голосов
/ 09 сентября 2011

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

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

Fog :: Storage :: Rackspace :: NotFound

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

1 Ответ

7 голосов
/ 18 ноября 2011

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

Однако я не был доволен решениемЯ не хотел добавлять эти 2 метода во все мои модели, которые используют загрузчик.Я склонен писать 1 базовый загрузчик и подкласс для любых изменений в конкретных потребностях.Итак, я копался в этих методах: удалите _ # {column_name}!и remove_previously_stored _ # {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

Оба эти метода просто вызывают remove!на загрузчике.Так что самый простой способ решить эту проблему - переопределить удаление!метод в загрузчике.Тогда вам нужно только переопределить один метод и в 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

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

~ Том

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...