2017-10-26 3 views
1

Wir haben viele Seeddaten für Artikel, die Büroklammer für Fotos verwenden (echte Seeddaten, keine Beispieldaten). Wir sind auch für die Verwendung von S3 mit Büroklammer eingerichtet. Laden unsere Samen die commonly suggested way ist schon schrecklich langsam, und wir sind dabei, eine Tonne mehr Gegenstände hinzuzufügen. Seeds dauert bereits ca. 5 Minuten zum laufen, also wird es wahrscheinlich eine oder zwei Stunden dauern, was den standardmäßigen Git-Verzweigungs-Workflow wirklich unpraktisch macht. Wir könnten von S3 für den Entwicklungsmodus schalten, aber lieber development Umgebung so nahe wie möglich production bleiben.Beschleunigen von Büroklammerkernen unter S3

Ich habe die Büroklammer-Dokumentation durchgelesen, um herauszufinden, ob wir S3-Links wiederverwenden können, ohne jedes Mal den Prozess des Hochladens durchlaufen zu müssen, und nichts gefunden haben. Gibt es eine Büroklammer "Standard" oder eine freundliche Lösung? Wie haben Sie eine große Anzahl von Seed-Dateien mit Paperclip/S3 gelöst?

Vielen Dank!

Antwort

1

Wenn ich mich nicht irre, speichert Paper Clip nur den Dateinamen Ihres Bildes in einer Spalte in der Datenbank. Wenn dies der Fall ist, können Sie die Datenbank einmal mit der "allgemein vorgeschlagenen Methode" erstellen. Nachdem Paper Clip Ihre Datenbank erstellt und die Daten in S3 hochgeladen hat, können Sie Ihre Datenbank nach Dateinamen, Dateigrößen und anderen Dateimetadaten abfragen.

Sie können dann mithilfe der vorhandenen Daten in Ihrer Datenbank eine neue Seed-Datei generieren, um die Datensatzwerte direkt zuzuordnen (d. H., Sie nutzen Paperclip nicht).

Um neue Datensätze zu erstellen, ohne dass Paperclip sie verarbeitet, empfehle ich folgende this example. Fügen Sie folgende zu Ihrem Modell:

attr_accessor :skip_image_processing 

before_asset_post_process :skip_image_processing? 

def skip_image_processing? 
    self.skip_image_processing 
end 

Sie sogar in der Lage sein kann, mit so etwas wie dies diese zweite Seed-Datei automatisch zu generieren:

@images_we_want_to_seed.each do |img| 
    puts "Image.create(" 
    puts " skip_image_processing: true, 
    puts " asset_file_name: img.asset_file_name, 
    puts " asset_file_size: img.asset_file_size, 
    puts " asset_content_type: image.asset_content_type, 
    .... 
    puts ")" 
    puts " " 
end 

habe ich nicht getestet, aber das sollte funktionieren.

+0

Danke für die Antwort, mit 'before _ * _ post_process' ist eine durchdachte Idee, aber leider verhindert das nicht, dass die Datei auf S3 hochgeladen wird, nur die Bildverarbeitung (die wir nicht verwenden). Darüber hinaus speichert Paperclip den Dateinamen in der Datenbank, aber es speichert nicht die eindeutige ID, die S3 den Dateien gibt. In der Datenbank ist es 'Something.jpg', aber auf S3 ist es' Something.jpg? 1509052552'. Das Wiederherstellen der Datenbank mit aus der Datenbank ausgegebenen Startwerten funktioniert leider nicht. – brainbag