Migrate_to_s3 schlägt fehl

Ich versuche, Uploads auf S3 auf einer relativ belebten Website zu verschieben.
Alles verläuft wie geplant, außer wenn ich rake uploads:migrate_to_s3 ausführe, erhalte ich folgende Fehlermeldung:

Aktualisiere die URLs in der Datenbank...
Alte optimierte Bilder werden entfernt...
Alle Beiträge, die Lightboxen enthalten, werden für ein erneutes Backen markiert...
2023 Beiträge wurden für ein erneutes Backen markiert
rake abgebrochen!
FileStore::ToS3MigrationError: 1 von 9629 Uploads wurden nicht nach S3 migriert. S3-Migration fehlgeschlagen für db 'default'.
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:79:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:123:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:102:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:100:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:96:in `block in <main>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
(Vollständigen Trace anzeigen durch Ausführen der Aufgabe mit --trace)

Diese Zeile hat meine Aufmerksamkeit besonders erregt: FileStore::ToS3MigrationError: 1 of 9629 uploads are not migrated to S3. S3 migration failed for db 'default'.

Ich gehe davon aus, dass eine problematische Datei dafür verantwortlich ist, dass die gesamte Rake-Aufgabe fehlschlägt? Gibt es eine Möglichkeit herauszufinden, welche Datei das Problem verursacht und sie vielleicht einfach zu entfernen, damit der Rest der Aufgabe friedlich abgeschlossen werden kann?

1 „Gefällt mir“

Einige Aktualisierung:
Die Website scheint normal zu laden und soweit ich sehen kann, werden hochgeladene Bilder vom CDN ausgeliefert.
Die lokale Kopie aller Uploads existiert noch auf dem Server. Ich gehe davon aus, dass dies daran liegt, dass die Migration als fehlgeschlagen markiert ist.
Hier ist eine Ausgabe von rake uploads:s3_migration_status, falls sie irgendwie hilfreich ist?

# rake uploads:s3_migration_status
1 von 9630 Uploads sind nicht nach S3 migriert. S3-Migration fehlgeschlagen für DB 'default'.
19 Beiträge sind nicht auf die neue S3-Upload-URL umgemappt. S3-Migration fehlgeschlagen für DB 'default'.
Keine Beiträge erfordern ein erneutes Backen
Website ist nicht bereit für die Migration

Sie finden möglicherweise einen Verweis darauf, welche Datei fehlgeschlagen ist, über Admin > Protokolle > Fehlerprotokolle

Wenn das nicht hilft, denke ich, dass die Suche in der Datenbank nach Beiträgen mit cooked, die yourdomain/uploads/ enthalten, Ihnen eine Liste der 19 im Migrationsstatus erwähnten Beiträge liefert. Im schlimmsten Fall könnten Sie diese dann manuell durchsehen und alle Uploads mit dem in S3 befindlichen vergleichen.

Etwas wie:

rails c
Post.where("cooked like '%discourse.example.com/uploads/%'")
1 „Gefällt mir“

Hallo @Simon_Manning

Ich habe deine Vorschläge ausprobiert, aber leider nichts Relevantes in den Fehlerprotokollen gefunden. Ich sehe einen Eintrag wie
Bildoptimierung fehlgeschlagen: Unbekannter Grund, aber er gibt mir keine weiteren Informationen als das, was dort steht.

Ich habe auch deine vorgeschlagene Abfrage ausprobiert. Ich erhalte zwar eine Reihe von Beiträgen als Ergebnis, aber wenn ich diese Beiträge besuche, enthalten sie eine Reihe von Miniaturansichten aus Onebox-Vorschauen. Wenn ich versuche, die Bilder in diesen Miniaturansichten in einem neuen Tab zu öffnen, scheinen sie vom CDN geladen zu werden.

Ich würde erwarten, dass ich so etwas für 18 dieser 19 Beiträge sehe, vielleicht sogar für alle 19, wenn der eine fehlgeschlagene Upload zufällig in einem Beitrag mit mehreren Uploads vorkommt.

Was einfacher sein könnte, ist, alle Dateinamen aus dem Abfrageergebnis (z. B. f8a2d9381889b8693db2777acac566bd7b134fa5.png) zu extrahieren und sie in S3 zu suchen. Theoretisch sollte genau einer fehlen. Ignorieren Sie die Derivate, suchen Sie nur nach denen mit /originals/ im Pfad.

Ein bisschen mühsam, aber es sollte nicht zu lange dauern, wenn die Abfrage nur diese 19 Beiträge ausgewählt hat.

2 „Gefällt mir“

Ich habe den Schuldigen gefunden, wie gehe ich weiter vor?

Was mir logisch erscheint, ist vielleicht nicht der beste Ausweg.
Hier sind die Optionen, die ich sehe:

  1. Referenz auf die Datei aus dem betreffenden Beitrag entfernen
  2. Datei vom Server löschen
  3. Den Dateilink auf etwas Generisches umleiten

Oder denke ich vielleicht völlig falsch?

Wenn es keine offensichtliche Lösung gibt, um den Upload erfolgreich durchzuführen, scheinen Option 1 oder 3 gute Wege zu sein. 2 würde ich wahrscheinlich Discourse überlassen, speziell der Aufgabe, verwaiste Uploads zu bereinigen, deren Intervall durch die Einstellung clean orphan uploads grace period hours gesteuert wird.

Es könnte eine gute Idee sein, die Datei zu sichern, bevor sie gelöscht wird. Wenn sie keine sensiblen Daten enthält, könnte sie nützlich sein, um zu testen, warum sie während der Migration nicht hochgeladen werden kann.

Etwas anderes, das Sie nach dem Entfernen der Datei und dem Abschluss der Migration (und dem Herunterladen der fehlerhaften Datei) versuchen könnten, ist, den Beitrag erneut zu bearbeiten, um die Datei wieder hinzuzufügen. Es wäre interessant zu wissen, ob der Upload zu S3 vollständig fehlschlägt oder nur während der Migrationsaufgabe.

Ich habe denselben Fehler erhalten, bei 64 Beiträgen. Unmöglich, sie in 80.000 Dateien zu finden…

Was würde passieren, wenn ich lokale Dateien lösche (die meisten wurden bereits migriert)?

Ich bestätige, dass die Dateien migriert wurden, aber ich habe denselben Fehler erhalten.

Irgendwelche Vorschläge? Uploads sind auf s3 und funktionieren einwandfrei, aber die Aufgabe: Migration zu s3 schlägt fehl.

Wenn es Ihnen nichts ausmacht, diese 64 Dateien zu verlieren, habe ich, als dieselbe Rake-Aufgabe immer wieder fehlschlug, sie bearbeitet und sie nur dann fehlschlagen lassen, wenn 100 Fehler statt 1 auftreten.

Das wäre für mich in Ordnung.
Was soll ich tun, um die Aufgabe zu bearbeiten?

Sie können zuerst versuchen, es mit auszuführen: SKIP_FAILED=1 rake uploads:migrate_to_s3.

Wenn das nicht funktioniert, bearbeiten Sie diese Zeile hier und versuchen Sie es erneut

SKIP_FAILED=100 rake uploads:migrate_to_s3 versucht
 
=> 0 Dateien
 - S3-Dateien auflisten
................................................................................                                                                                                                                                             .. => 81070 Dateien
 - Dateien mit S3 synchronisieren
 
Aktualisieren der URLs in der Datenbank...
Alte optimierte Bilder entfernen...
Alle Beiträge mit Lightboxen zum erneuten Backen markieren...
54453 Beiträge wurden zum erneuten Backen markiert
53 Beiträge werden nicht auf die neue S3-Upload-URL abgebildet. S3-Migration für die Datenbank 'default' fehlgeschlagen.
 
 
Ich habe nicht verstanden, wie ich die geänderte Datei in mein Discourse-Skript einfügen soll.

Ich habe das vielleicht falsch verstanden, aber ich glaube, Sie müssen SKIP_FAILED=1 ausführen, um SKIP_FAILED einzuschalten, anstatt einen Betrag zuzuweisen.

1 „Gefällt mir“

Versucht mit diesem Befehl. … dasselbe
Ergebnis

Schade. Es gibt @Falco’s anderen Vorschlag, die Rake-Aufgabe zu bearbeiten – aber leider weiß ich nicht, wie das geht, und ich kann keine Anweisungen finden, wenn ich suche. :slightly_smiling_face:

Hoffentlich kann jemand anderes helfen? :crossed_fingers:

1 „Gefällt mir“

Ich konnte myscript.rb in meinem /shared-Ordner erstellen, aber ich kann es nicht ausführen.

Haben Sie weitere Vorschläge? @vulkanino Mir ist aufgefallen, dass Sie ein ähnliches Problem hatten.