
kontaktiere uns


Vor Kurzem, nach der Bereitstellung einer Web-App auf einem dedizierten Server, wurde uns klar, dass der Festplattenspeicher in Zukunft ein Engpass für den Betrieb der Anwendung sein würde.
Es würde während der App-Nutzung einen exponentiellen Speicherplatz benötigen, da es irgendwann an vielen Standorten gleichzeitig verwendet wird, während gleichzeitig mit einem zentralen Server kommuniziert wird, der Hunderte von Megabyte an Ressourcen hochlädt.
Wir haben beschlossen, den Speicher von unserem dedizierten Server auf Amazon AWS S3 zu verlagern, um die Skalierbarkeit der Anwendung zu erhöhen.
Einfache Sachen, könnten wir zum jetzigen Zeitpunkt sagen. Ändern Sie einfach eine Konfiguration in Paperclip, um S3 zu verwenden.
Nun, das Problem war, dass die App bereits in Produktion war, sodass wir aufgrund der Änderung alle vorhandenen Ressourcen auf S3 verschieben mussten, um Datenverluste zu verhindern (natürlich!).
Während unserer Recherche haben wir eine einfache Lösung gefunden, um alle Assets auf S3 zu migrieren. Die Lösung im Internet ist ziemlich selbsterklärend; schicken Sie einfach den Ordner, in dem Ihre Assets gespeichert sind, an den S3 (den bekannten öffentlich/system Ordner)!
Dies würde in einer Situation funktionieren, in der url Die Paperclip-Konfiguration wurde zuvor definiert. Die Standardeinstellung Schema das Paperclip verwendet, landet in einer Datei mit dem Speicherort wie:
Um zu verhindern, dass Sie Zeit verlieren, wenn Sie herausfinden, wo /000/000/ kam von, die Erklärung für alle führenden Nullen, und um eine flexible Lösung zu schaffen, haben wir beschlossen, unsere eigene Strategie zu entwickeln.
Wir müssen alle Modellanhänge verschieben;
Wir müssen alle Stile bewahren;
Dies muss erfolgen, ohne den Server zu sperren;
Der S3-Bucket sollte je nach Rails-Umgebung (Test, Produktion, Staging) unterschiedlich sein;
Wir müssen minimale Ausfallzeiten haben.
Zuerst müssen wir in der Lage sein, die Konfiguration auf Paperclip so zu ändern, dass S3 nach der Migration verwendet wird und dass wir unseren Server während der Migration verwenden können (wir benötigen die Anhangsdateien).
Sehen wir uns ein typisches Modell mit Anhängen an:
Um das Modell für die Migration zum S3-Dienst vorzubereiten, müssen wir einen Switch hinzufügen, der einfach aktiviert werden kann.
Lass uns eine erstellen s3_migrate.yml Datei mit einer Konfiguration:
Von Zeile 1 bis 4 ist die normale Konfiguration für den Paperclip S3-Speicher, in Zeile 5 haben wir den Schalter hinzugefügt, um den S3 zu aktivieren.
Wenn es nicht aktiviert ist, sollte die Anwendung die Assets vom lokalen Server aus bereitstellen. Als Nächstes ändern wir unsere Modelldefinition, um diese Änderungen widerzuspiegeln.
In diesem Snippet speichern wir die Paperclip-Optionen in einem Hash (PAPERCLIP_STORAGE_OPTIONS) und laden Sie die Datei mit den Migrationsoptionen. Wir führen die S3-Einstellungen zusammen, wenn aktiviert wahr ist.
Im Moment haben wir unser Modell so vorbereitet, dass es nach Abschluss des Migrationsprozesses zu S3 wechselt.
Um unsere Assets auf S3 zu migrieren, benötigen wir eine benutzerdefinierte Aufgabe, um die Aktion auszuführen. Hier ist das dafür verantwortliche Snippet.
Erstellen Sie eine Datei mit dem Namen paperclip_migrate.rake und zieh es an lib/aufgaben Ordner und fügen Sie den obigen Code ein.
Führen Sie die Aufgabe aus:
**Nach Abschluss der Migration müssen wir unsere s3_migrate.yml aktualisieren und den S3-Speicher aktivieren. **
Ändere einfach die Zeile aktiviertem zu wahr. Starte den Webserver neu und du bist fertig!
Hinweis 1: Die Pfadeinstellung in s3_migrate.yml sollte dem Wert in der Zeile 44 der Aufgabe entsprechen. Ändern Sie das entsprechend Ihrem Szenario.
Hinweis 2: Nachdem Sie die Migration abgeschlossen und sichergestellt haben, dass unsere Assets erfolgreich auf S3 migriert wurden, können Sie die Dateien löschen, die noch in öffentlich/system.
Lassen Sie uns unsere Anforderungen für dieses Problem durchgehen und jede einzelne davon validieren.
Da wir die Möglichkeit hinzufügen, die Klasse und die Objekte dynamisch zu spezifizieren, kann man die Aufgabe mit beliebigen Modellen ausführen, zum Beispiel:
Vollendet!
In unserer Aufgabe können wir, nachdem wir überprüft haben, ob sich mindestens ein Objekt in unserer Datenbank befindet, es abfragen, um alle definierten Stile abzurufen:
Es wird zurückgeben, was wir erwarten:
Vollendet!
Wir verwenden einen Rake-Task, um die Migration durchzuführen, damit sie ausgeführt werden kann, ohne die Verwendung der Anwendung in der Produktionsumgebung zu beeinträchtigen.
Vollendet!
In unserem s3_migrate.yml wir definieren den Pfad der Vermögenswerte, um die zu nutzen Rails.env variabel, sodass die Assets entsprechend der Umgebung gespeichert werden, in der die Anwendung ausgeführt wird.
Vollendet!
Wir benötigen nur einen einzigen Neustart des Webservers! Wir können also sagen, dass die Anforderung war...
Vollendet!
Und das ist so ziemlich alles, was Sie wissen müssen, um Paperclip-Assets von einem lokalen Server zu Amazon S3 zu migrieren.
Erfahrung mit Backend-Systemen für das Web unter Verwendung modernster Technologien. Full-Stack-Entwickler und Produkthersteller. Ruby/Rails, NodeJS, ElectronJS.
People who read this post, also found these interesting: