Bilder nach einer Wiederherstellung haben keine S3-Bucket-URL

Wir haben unser Discourse-Forum aufgebaut, getestet und absichtlich Lücken gesucht, bevor wir das gesamte Projekt in die Produktion bringen. Ich habe gerade mein Testforum, bei dem S3-Uploads aktiviert waren, von einem Server auf einen anderen migriert. Nach der Wiederherstellung wurden alle URLs für angehängte Inhalte auf die URL des Forums umgeschrieben und nicht auf die S3…

Glücklicherweise handelt es sich um ein Testforum, daher ist uns die Daten nicht allzu wichtig. Dennoch möchte ich:
A. Dies trotzdem beheben.

B. Eine Möglichkeit finden, dies in der Produktion zu verhindern oder abzuschwächen.

Betroffen waren nicht nur Beiträge, sondern alle Bilder, Medien, Inhalte und Avatare (was ziemlich dramatisch ist)…

Habt ihr Ideen?

Bevor Sie die Wiederherstellung durchführen, können Sie S3 auf der Zielseite in Ihrer app.yml konfigurieren (nicht über das Admin-Dashboard). Sobald Sie bestätigt haben, dass dies eingerichtet ist und Sie auf den richtigen Bucket zugreifen können, können Sie mit der Wiederherstellung fortfahren. Die Medien sollten dann korrekt verknüpft sein.

Eine Anleitung zur Konfiguration von S3 auf diese Weise finden Sie hier: Configure an S3 compatible object storage provider for uploads

Hallo Kris,

Wir haben das im Wesentlichen so gemacht und sind dadurch in diese Situation geraten.

Ich habe die app.yml genau so, wie sie war, am Zielort kopiert und anschließend vom Original ein Backup erstellt. Das Problem lag bei der Wiederherstellung: Beim Wiederherstellen wurden die URLs umgeschrieben, obwohl sich nichts geändert hatte und die S3-Uploads weiterhin aktiviert waren.

Letztendlich haben wir das Problem mit einer Neuberechnung (Rebake) gelöst – wir sind uns zwar nicht sicher, was genau geholfen hat, da Discourses Caching sehr aggressiv ist und wir zwischen den vielen Versuchen nicht wissen, welche Maßnahme den Ausschlag gab. Dennoch bleiben die Fragen offen: Wie führen wir Migrationen mit minimalen Problemen durch oder stellen sogar aus einem Backup in der Produktion wieder her, falls dies nötig ist?

Das klingt so, als hättest du S3 über die Site-Einstellungen konfiguriert und nicht über Umgebungsvariablen, wie Kris vorgeschlagen hat. Der Wiederherstellungsprozess muss über S3 Bescheid wissen. Das ist mit Site-Einstellungen nicht möglich.

Falls du möchtest, kannst du auch eine Sicherung ohne Uploads über die Konsole erstellen: discourse backup --sql_only
Das Wiederherstellen einer solchen Sicherung überschreibt die Upload-URLs nicht. Solange dein neuer Server Zugriff auf denselben S3-Bucket hat, funktioniert das.

Die S3-Konfiguration befindet sich in der app.yml, nicht in den Site-Einstellungen.

Edit:

Mir ist bewusst, dass ich nicht ausführlich genug erkläre und ich nicht beabsichtige, Details zu verschweigen.

Wir nutzen OVH S3, und dies ist in der app.yml konfiguriert.

Ich habe unser Testforum ohne Uploads gesichert, wobei S3 zu diesem Zeitpunkt noch aktiviert war.

Anschließend habe ich es auf der neuen Site mit exakt derselben app.yml wiederhergestellt, und dort begann das Problem. Um es klarzustellen: Es ist aktuell behoben, aber ich bin unsicher, ob es an meinem mehrfachen Neustarten lag oder daran, dass Discourse aggressiv zwischengespeichert hat. Deshalb muss ich wissen, wie man dies wirklich korrekt durchführt und es beim ersten Mal richtig macht. Meine Sorge ist, dass wir, falls wir jemals eine Sicherung auf unsere Produktionsinstanz wiederherstellen müssen und auf dieses Problem stoßen, genau wissen müssen, wie wir es sofort beheben können, bevor die Benutzer es bemerken.