Rails, Carrierwave und Nebel - Ignorieren Sie fehlende Dateien auf Zerstörung oder Überschreiben
-
28-10-2019 - |
Frage
Was ist der richtige Weg in Rails W Carrierwave mit Nebel, um Datensätze zu löschen/zu zerstören, wenn fehlende Anhänge/Bilder fehlen?
Ich versuche nach einem fehlenden Import von Bildern in Rackspace ein paar Datensätze aufzuräumen. Es gibt ein paar fehlende Bilder und Daumen. Wenn ich versuche, einen Datensatz zu löschen, erhalte ich einen Fehler
Nebel :: Storage :: Rackspace :: NotFound
Gibt es eine Carrierwave- oder Nebeleinstellung, um diese Art von Szenarien toleranter zu machen?
Lösung
Ich bin gerade auf dieses Problem gestoßen und fand das hier eingereichte ursprüngliche Problem: https://github.com/jnicklas/carrierwave/issues/481 und die Wiki -Seite, die das Fix hier beschreibt: https://github.com/jnicklas/carrierwave/wiki/how-toage%3a-nently-ignore-missing-files-on-destroy-or-overwrite
Ich war jedoch nicht zufrieden mit der Lösung, ich wollte diese beiden Methoden nicht in alle meine Modelle hinzufügen müssen, die einen Uploader verwenden. Ich neige dazu, 1 Basis -Uploader und Unterklasse zu schreiben, die für alle Änderungen an bestimmten Bedürfnissen. Also habe ich in diese Methoden ausgegraben: Entfernen Sie _#{column_name}! und remove_previous_stored _#{column_name} und fand hier ein Thema: https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#l204 und https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#l204
Beide Methoden rufen einfach REMET REMET an! Auf dem Uploader. Der einfachste Weg, das Problem zu beheben, besteht darin, das Entfernen zu überschreiben! Methode im Uploader. Dann müssen Sie nur eine Methode und an einem Ort überschreiben. Meine Überschreibung sieht aus wie folgt:
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
Dies sollte Ihre Probleme lösen, wenn Sie versuchen, ein Bild erneut zu laden und ein Bild zu überschreiben, das nicht existiert, oder wenn Sie nur versuchen, ein Bild zu löschen, das nicht vorhanden ist.
~ Tom