@pnoeric Da dir die Verfügbarkeit der Seite wichtig ist, wollte ich dir mitteilen, was ich bisher gelernt habe.
Wie bereits erwähnt, habe ich die Migration live durchgeführt. Wenn ich die Migration nicht drossle, werden die Warteschlangen, die Aufgaben wie das Benachrichtigen von Nutzern über Aktivitäten anderer erledigen, verstopft, und die Benutzererfahrung auf der Seite leidet.
Ich habe etwa 500 Beiträge mit Videos und rund 30.000 Beiträge mit Bildern migriert, was insgesamt etwa zwei Wochen in Anspruch nahm.
Falls du den von mir verwendeten Code ausprobieren möchtest, findest du ihn aktuell hier:
Du kannst ihn herunterladen und in deine App kopieren, um den aktuellen Inhalt von lib/tasks/uploads.rake zu ersetzen.
Mit diesem Code kannst du beispielsweise Folgendes tun:
bin/rake uploads:batch_migrate_from_s3[100,1000]
Dadurch werden nur insgesamt 1000 Beiträge mit Uploads berücksichtigt, und Dateien werden von maximal 100 Beiträgen migriert, bevor der Vorgang gestoppt wird. Jedes Mal, wenn ein Beitrag nach der Migration seiner Uploads tatsächlich geändert wird, wartet das Skript, bis die Warteschlange leer ist, bevor es mit dem nächsten fortfährt.
Wenn du die Datei einfügst, wird dies zukünftige Site-Updates unterbrechen, bis du die Änderung rückgängig machst. Der einfachste Weg, dies nach Abschluss deiner Arbeit rückgängig zu machen, ist ./launcher rebuild app (obwohl ich als Entwickler git checkout HEAD lib/tasks/uploads.rake verwende, um meine Änderungen rückgängig zu machen…)
Ich habe festgestellt, dass ich zumindest bei Digital Ocean Spaces manchmal einige Wiederholungen durchführen muss, bevor eine Migration erfolgreich ist. Das aktuelle Skript gibt dir in diesem Fall keine Warnung aus; du musst es einfach weiterhin ausführen und abwarten, ob es klappt. Ich habe jedoch einen Pull Request (PR) eingereicht, der in dieser Hinsicht Fehlermeldungen ausgibt, damit du zumindest weißt, wenn etwas schiefgelaufen ist.
…
Ich habe eine einfache kurze Wiederholungsschleife sowie die Fehlermeldung hinzugefügt, und es scheint, dass die Wiederholungsschleife das Problem löst. Außerdem wurde die Validierung gemäß den aktuellen Regeln bisher auf den Rohinhalt vergangener Beiträge angewendet, was die Migration unterbrechen und Beiträge, die neu gerendert werden mussten, stillschweigend unberührt lassen konnte; auch das habe ich behoben. Du solltest auf keinen Fall eine Migration durchführen, ohne mindestens die Validierungskorrektur zu erhalten, die einer der Commits in meinem derzeit zur Prüfung stehenden PR ist.
…
Meine Migration ist, soweit ich weiß, abgeschlossen. Mein PR enthält den gesamten Code, den ich für den Abschluss meiner Migration verwendet habe. Er wurde noch nicht geprüft. Falls du möchtest, empfehle ich dir, unter Migrate_from_s3 problems mitzuverfolgen.