Rails, CarrierWave e Fog - Ignora i file mancanti su Destroy o Soverwrite
-
28-10-2019 - |
Domanda
Qual è il modo corretto in Rails W CarrierWave usando Fog per eliminare/distruggere i record quando ci sono allegati/immagini mancanti?
Sto cercando di ripulire alcuni record dopo un'importazione mancante di immagini su Rackspace. Ci sono alcune immagini mancanti e pollici. Quando provo a eliminare un record ricevo un errore
Fog :: Storage :: Rackspace :: Notfound
Esiste un'impostazione di onde di carrier o nebbia per renderlo più tollerante a questo tipo di scenari?
Soluzione
Ho appena incontrato questo problema e ho trovato il problema originale presentato qui: https://github.com/jnicklas/carrierwave/issues/481 e la pagina wiki che descrive la correzione qui: https://github.com/jnicklas/carrierwave/wiki/how%3a-silelly-ignore-missing-files-on-destroy-or-overwrite
Tuttavia, non ero contento della soluzione, non volevo aggiungere quei 2 metodi in tutti i miei modelli che usano un uploader. Tendo a scrivere 1 uploader di base e sottoclasse che per eventuali modifiche alle esigenze specifiche. Quindi ho scavato in questi metodi: rimuovi _#{column_name}! e rimuovi_prevely_stored _#{column_name} e trovato tema qui: https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#l204 e https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#l204
Entrambi questi metodi chiamano semplicemente Rimuovi! Sul caricatore. Quindi il modo più semplice per risolvere il problema è sovrascrivere la Rimuovi! Metodo nel caricatore. Quindi devi solo sovrascrivere un metodo e in 1 posto. Il mio sovraccarico sembra il seguente:
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
Ciò dovrebbe risolvere i tuoi problemi quando si tenta di ricaricare un'immagine e sovrascrivere un'immagine che non esiste o quando si tenta di eliminare un'immagine che non esiste.
~ Tom