Rails, portadorwave y niebla: ignore los archivos faltantes en destruir o sobrescribir
-
28-10-2019 - |
Pregunta
¿Cuál es la forma correcta en Rails W Carrierwave usando Fog para eliminar/destruir registros cuando faltan archivos adjuntos/imágenes?
Estoy tratando de limpiar algunos registros después de una importación faltante de imágenes a Rackspace. Hay algunas imágenes y pulgares faltantes. Cuando intento eliminar un registro, recibo un error
Niebla :: almacenamiento :: rackspace :: nofound
¿Existe una configuración de transporte o niebla para que sea más tolerante a este tipo de escenarios?
Solución
Acabo de encontrarme con este problema y encontré el problema original presentado aquí: https://github.com/jnicklas/carrierwave/issues/481 y la página wiki que describe la solución aquí: https://github.com/jnicklas/carrierwave/wiki/how-to%3a-silently-ignore-missing-files-on-destroy-or-overwrite
Sin embargo, no estaba contento con la solución, no quería tener que agregar esos 2 métodos a todos mis modelos que usan un cargador. Tiendo a escribir 1 cargador base y subclase que para cualquier cambio a necesidades específicas. Así que cavé en esos métodos: ¡Eliminar _#{column_name}! y eliminar_preventy_stored _#{column_name} y el tema encontrado aquí: https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#204 y https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#204
¡Ambos métodos simplemente llaman eliminar! en el cargador. ¡Entonces la forma más fácil de solucionar el problema es anular el eliminación! Método en el cargador. Entonces solo necesita anular un método y en 1 lugar. Mi sobrevaloramiento se parece al siguiente:
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
Eso debería resolver sus problemas al tratar de volver a cargar una imagen y sobrescribir una imagen que no existe o cuando solo intenta eliminar una imagen que no existe.
~ Tom