2017-04-03 3 views
0

Ich benutze Büroklammer mit AWS in meiner Schiene App. Ich habe ein Modell, das das Bild enthält:Büroklammer löscht keine Bilder von S3 auf destroy

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 

Grundsätzlich kann ich ein Bild in base64 passieren und es verarbeitet und speichert sie korrekt auf S3. Das Problem ist, wenn ich, dass .Destroy do

p = PaperclipFile.first 
p.destroy 

Nachdem der Datensatz aus der DB ist weg, aber die Datei wird nicht aus dem Eimer zerstört. Ich bekomme keine Fehler, daher sieht es nicht so aus, als würde es überhaupt versuchen.

Die Ausgabe lautet:

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 > 

Für die Aufzeichnung ich Rubin verwenden 2.4, Rails 5.0.2 und wie für die Edelsteine ​​sie aussehen:

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

Dank!

Antwort

0

Es ist nichts falsch mit dem Code, den Sie geschrieben haben.

Wenn Sie möchten, machen auch das Bild von S3 entfernen Sie einfach die folgenden Änderungen-

p = PaperclipFile.first 
p.destroy # Removes the attachment from DB 
p.clear # Deletes the attachment from S3 
p.save # To save the model. 
+0

clear ist keine Funktion von p. Vielleicht meintest du p.image.clear/p.image.destroy? Ich habe auch versucht, die ohne Glück – mrk

+0

versuchen Sie einfach, das Objekt zu speichern, nachdem Sie p.image.destroy/p.image.clear –

+0

Danke für Ihre Anregungen, aber bis jetzt keine Freude – mrk

0

Standard preserve_files auf false gesetzt. Versuchen Sie, die Option wie folgt zu entfernen.

has_attached_file :image 
+0

Danke. Leider habe ich sowohl mit nichts als auch mit preserve_files versucht: false mit dem gleichen Effekt – mrk

+0

Lasst uns noch einen Versuch wagen. '' 'p.image = null p.save p.destroy''' – scs

+0

Ich habe das versucht, aber es hat nicht geholfen. Stellt sich heraus, es hat mit Paranoia zu tun. Ich entfernte Paranoia von überall und es funktioniert. Ich muss es richtig verkabeln, aber zumindest weiß ich, dass .destroy das Bild jetzt löscht. Vielen Dank! – mrk

Verwandte Themen