Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

141
Vistas
Paperclip no elimina imágenes de S3 al destruir

Estoy usando Paperclip con AWS en mi aplicación Rails. Tengo un modelo que sostiene la imagen:

 class PaperclipFile < ActiveRecord::Base before_validation :parse_image belongs_to :attachment attr_accessor :base64_attachment has_attached_file :image, preserve_files: false validates_attachment :image, presence: true do_not_validate_attachment_file_type :image private def parse_image return unless base64_attachment image = Paperclip.io_adapters.for(base64_attachment) image.original_filename = "img_#{SecureRandom.urlsafe_base64}.jpg" end end

Básicamente puedo pasar una imagen en base64 y la procesa y almacena correctamente en S3. El problema es cuando hago .destroy

 p = PaperclipFile.first p.destroy

Después de eso, el registro desaparece de la base de datos pero el archivo no se destruye del depósito. No recibo ningún error, así que no parece que lo esté intentando en absoluto.

La salida es:

 2.4.0 :005 > PaperclipFile.first.destroy PaperclipFile Load (0.8ms) SELECT "paperclip_files".* FROM "paperclip_files" ORDER BY "paperclip_files"."id" ASC LIMIT $1 [["LIMIT", 1]] (0.2ms) BEGIN SQL (0.7ms) DELETE FROM "paperclip_files" WHERE "paperclip_files"."id" = $1 [["id", 2]] (4.1ms) COMMIT => #<PaperclipFile id: 2, attachment_id: 2, created_at: "2017-04-03 04:02:11", updated_at: "2017-04-03 04:02:11", image_file_name: nil, image_content_type: nil, image_file_size: nil, image_updated_at: nil> 2.4.0 :006 >

Para que conste, uso Ruby 2.4, Rails 5.0.2 y en cuanto a las gemas, se ven así:

 # Attachments gem 'paperclip' gem 'aws-sdk', '~> 2.3'

¡Gracias!

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No hay nada malo con el código que has escrito.

Si también desea eliminar la imagen de S3, simplemente realice los siguientes cambios:

 p = PaperclipFile.first p.destroy # Removes the attachment from DB p.clear # Deletes the attachment from S3 p.save # To save the model.
over 4 years ago · Santiago Trujillo Denunciar

0

Predeterminado preserve_files establecido en falso. Intente eliminar la opción de la siguiente manera.

 has_attached_file :image
over 4 years ago · Santiago Trujillo Denunciar

0

No tuve problemas con destroy, pero usé delete_all , que no activa las devoluciones de llamada, y tuvo el mismo efecto que has visto.

Otra posible causa podría haber sido la falta de permisos para eliminar archivos. Compruebe la eliminación directamente sobre el sdk de ruby s3.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda