Rails, CarrierWave и Fog - игнорируйте отсутствующие файлы при уничтожении или перезаписи
-
28-10-2019 - |
Вопрос
Как правильный способ в 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
Это должно решать ваши проблемы при попытке повторной загрузки изображения и перезаписать изображение, которое не существует, или когда вы просто пытаетесь удалить изображение, которое не существует.
~ Том