Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

144
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda