Rails, CarrierWave et brouillard - Ignorer les fichiers manquants sur Destroy ou Ecraser
-
28-10-2019 - |
Question
Quelle est la bonne façon dans Rails w CarrierWave en utilisant Fog pour supprimer / détruire les dossiers quand il y a des annexes / images?
Je suis en train de nettoyer quelques dossiers après une importation manquante d'images à Rackspace. Il y a quelques images manquantes et les pouces. Lorsque je tente de supprimer un enregistrement que j'obtiens une erreur
Fog :: Stockage :: :: Rackspace NotFound
Y at-il un cadre CarrierWave ou brouillard il plus tolérant à ce genre de scénarios?
La solution
Je viens de croiser cette question et a trouvé la question initiale déposée ici: https: // GitHub. com / jnicklas / carrierwave / questions / 481 et la page wiki décrivant le correctif ici: https://github.com/jnicklas/carrierwave/wiki/How-To%3A-Silently-ignore-missing-files-on-destroy -ou-Ecraser
Mais je n'étais pas satisfait de la solution, je ne voulais pas avoir à ajouter ces 2 méthodes dans tous mes modèles qui utilisent un Uploader. J'ai tendance à écrire 1 Uploader de base et sous-classe que pour toute modification à des besoins spécifiques. Donc, je creusais dans ces méthodes: supprimer _ # {nom_colonne}! et remove_previously_stored _ # {nom_colonne} et le thème trouvé ici: https: //github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#L204 et https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#L204
Ces deux méthodes supprimer tout appel! sur le Uploader. Donc, la meilleure façon de résoudre le problème est de remplacer le supprimer! méthode dans le Uploader. Ensuite, il vous suffit de remplacer une méthode et 1 place. Mon overrride se présente comme suit:
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
Cela devrait résoudre vos problèmes en essayant de re-télécharger une image et écrasez une image qui n'existe pas ou lorsque vous essayez juste et supprimer une image qui n'existe pas.
~ Tom