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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top