Verwenden Sie Amazon S3 nicht mehr für Uploads

Das Backup enthält viele Verzeichnisse und Unterverzeichnisse. Ich denke, Sie müssen die Dateien aus den Verzeichnissen beider Buckets rekursiv an den entsprechenden Ort auf dem lokalen Server kopieren. Beispielsweise müssen alle Inhalte der Verzeichnisse 1X und 2X beider Buckets in die Verzeichnisse 1X und 2X auf dem lokalen Server kopiert werden. Ich bin mir nicht ganz sicher, aber das ist meine Einschätzung.

Können Sie bestätigen, dass Sie alle Dateien ordnungsgemäß kopiert haben?

2 „Gefällt mir“

Ja, ich verstehe das vollständig und habe sichergestellt, dass ihre relativen Pfade exakt gleich bleiben.

Zum Beispiel: Wenn eine Datei zuvor unter
//bucket1/uploads/original/2x/f/filename.jpg
und die andere unter
//bucket2/uploads/original/1x/a/filename.png
existierte,

existieren die beiden nun auch unter:
/var/discourse/shared/web_only/uploads/default/original/2x/filename.jpg und ../original/1x/a/filename.png

Probleme
Bevor ich den Bucket-Inhalt auf den lokalen Server kopiert habe, stellte ich fest, dass einige meiner Bilder nur als Symbole angezeigt wurden und der vollständige Bildinhalt von Website-Besuchern nur durch Klicken auf dieses Symbol betrachtet werden konnte.

Nachdem ich alle Bucket-Inhalte (nicht verschoben, sondern kopiert) an den oben genannten Speicherort auf meinem lokalen Server übertragen habe (mit intakten relativen Pfaden) und den Befehl
discourse remap:oldurl-or-path new-url-or-path
ausgeführt habe,

hat sich visuell auf der Website nichts geändert. Doch als ich dann
rake posts:rebake
ausführte,

verschwanden sogar meine Bildsymbole, und beim Hovern mit der Maus über den leeren Platz des Bildplatzhalters wurde keine URL oder kein Pfad mehr angezeigt.

Ich hoffe, ich habe genügend Details angegeben.

1 „Gefällt mir“

In diesem Fall denke ich, dass das Folgende dein Problem beheben wird.

    ./launcher enter app
    discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
    discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
    rake posts:rebake
1 „Gefällt mir“

Danke, ji.

Aber wie ich bereits erklärt habe, verschwinden nach dem Durchführen der ‘remap’- und ‘rebake’-Operation sogar die Icons der Bilder (d. h. die Situation wird noch schlimmer).

1 „Gefällt mir“

Beim Umleiten musst du den korrekten Pfad angeben, sonst kann es zu Fehlern kommen. Ich habe manuell einen Link von S3 aus dem früheren Beispieloutput umgelenkt, und er funktioniert.

Ein im Bucket gehostetes Bild:

https://bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png

Das gleiche Bild auf deinem lokalen Server gehostet:

https://bathindahelper.com/uploads/default/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png

Du kannst das Bild in einem neuen Tab öffnen, um die Links beider Bilder zu vergleichen. Daher gehe ich davon aus, dass dies funktionieren wird.

 ./launcher enter app
  discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  rake posts:rebake

1 „Gefällt mir“

Nochmals vielen Dank.

Ich habe mit der rechten Maustaste auf das (erste) Bild geklickt, und der Pfad, der in der Adressleiste angezeigt wurde, gehörte nicht zu meinem Bucket:

Das Gleiche galt für das zweite Bild.

Sie können einen Beispielbeitrag meiner Website hier überprüfen (der Beitrag ist zwar auf Hindi, aber Sie können leicht das kleine Bildsymbol im Beitrag finden). Das vollständige Bild wird nur angezeigt, wenn man auf das kleine Symbol klickt.

Wenn ich jedoch remappe und dann rebake, verschwindet auch dieses Symbol vollständig. Es gibt dann keine Möglichkeit mehr für den Besucher, das Bild zu sehen.

2 „Gefällt mir“

Es scheint, als hätten Sie CloudFront zuvor zum Caching verwendet. Löschen Sie Ihren Browser-Cache und versuchen Sie es erneut.
Wenn Sie CloudFront-Konfigurationen vorgenommen haben, ist es meiner Meinung nach besser, alle diese Konfigurationen rückgängig zu machen.

2 „Gefällt mir“

Kein Cloudflare {edit: CloudFront} (oder ein anderes CDN) von meiner Seite aus für meine Website, seit etwa 2 Jahren.

Die Bilder auf Meta werden möglicherweise auf Cloudflare gespeichert.

1 „Gefällt mir“

Nicht Cloudflare. Es ist CloudFront. Hast du den Browser-Cache geleert?

2 „Gefällt mir“

Ja, CloudFront (Entschuldigung).

Ja, habe ich. Außerdem habe ich dieses Thema im Inkognito-Modus von Firefox geöffnet.

1 „Gefällt mir“

Jetzt erhalte ich ebenfalls dieselben CloudFront-Links. Es scheint, als hättest du AWS CloudFront für deine Website aktiviert. CloudFront cacht die Bilder in deinem Bucket. Ich denke, du musst die Distribution in CloudFront entfernen. Du musst dich in dein AWS-Konto einloggen, um zu prüfen, ob die CloudFront-Distribution aktiv ist.

2 „Gefällt mir“

Hey, wir haben CloudFront hier missverstanden. Tatsächlich wird das Bild von Meta-Discourse zwischengespeichert. Das liegt an mir.

1 „Gefällt mir“

Ich habe CloudFront (oder ein anderes CDN) weder in AWS noch im Frontend je verwendet. Zwar habe ich vor etwa zwei Jahren CloudFlare für einen Monat oder so genutzt, habe es aber anschließend endgültig entfernt.
Auch habe ich CloudFront in AWS nicht ausgewählt. Daher stellt sich diese Frage auch nicht.

Außerdem werden auf meinem PC, wenn ich die Bilder öffne, die AWS-Bucket-Adressen angezeigt, nicht etwa eine andere CDN-Adresse.

1 „Gefällt mir“

Ich habe CloudFront hier missverstanden. Tatsächlich hat Meta Discourse das Bild zwischengespeichert. Ich habe meinen vorherigen Beitrag bearbeitet. Schau mal hier:

2 „Gefällt mir“

Du schlägst also nur vor, dass ich die Bildpfade neu mape (von der S3-Bucket-URL zum lokalen Serverpfad) und dann erneut bake.

Wie ich bereits erwähnt habe, habe ich das bereits getan und festgestellt, dass dies das Problem verschlimmert. (Außerdem funktioniert nach dem Re-Baking auch die Funktion „Wiederherstellen“ nicht mehr, und ein Zurücksetzen ist schwierig).

Hast du noch andere hilfreiche Ideen?

1 „Gefällt mir“

Haben Sie beim Remappen sicherstellen, dass die Pfade wie unten angegeben waren?

discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/

Welchen Pfad haben Sie beim Remappen angegeben?

Ich habe Ihnen in einem früheren Beitrag bereits ein Beispiel gegeben, das funktioniert hat. Mir ist keine andere Methode bekannt.

2 „Gefällt mir“

Ich werde es erneut versuchen, und zwar mit größter Sorgfalt.
Ich habe jedoch nach einer Methode gesucht, um herauszufinden, was hinter den Kulissen passiert. Zumindest bei einem Beispielbeitrag wollte ich sehen, welche Beiträge welchem Bucket zugeordnet sind und in welchem Chaos ich mich befinde.

Wie auch immer, ich werde es erneut versuchen und hier davon berichten. Nochmals vielen Dank.

1 „Gefällt mir“

Der Pfad, den Sie in Ihrer vorherigen Remap angegeben haben, wird im Ergebnis des folgenden Befehls angezeigt. Da beide Buckets noch vorhanden sind, denke ich, dass Ihre vorherige Remap möglicherweise fehlgeschlagen ist. Wie auch immer, jetzt liegt es an Ihnen. Ich hoffe, Sie finden bald eine Lösung. Viel Erfolg.

./launcher enter app
rails c
Upload.all.sample(2000).pluck(:url)

Vielen Dank

2 „Gefällt mir“

Nicht schlauer als du, aber ich habe es gerade durchlaufen – und mit @Pravis Hilfe geschafft.

Die Schritte, die du unternehmen musst, um von S3-Uploads zurück zum Standardzustand zu wechseln

Das ist nicht super-einfach – gehe sehr sorgfältig mit dem Text und den Links um, denn wenn etwas schiefgeht, wird es ein ziemliches Durcheinander, das aufgeräumt werden muss. Aber es ist sehr machbar.

Schritt 1 – Kopiere die Dateien aus deinem S3-Bucket in den Ordner public/uploads/default

Installiere zuerst die AWS CLI im App-Container:

cd /var/discourse
./launcher enter app
sudo apt install awscli

Konfiguriere AWS mit deiner S3-ID und deinem Passwort (meistens unkompliziert):

aws configure

Verwende dann aws, um den gesamten Inhalt des Buckets nach public/uploads/default/ zu kopieren:

aws s3 sync s3://mein-bucket-name/ public/uploads/default/

Schritt 2 – S3-URL neu zuordnen

Am einfachsten geht das, indem du ein Bild in deinem Forum findest und die URL inspizierst. Du möchtest alles bis zum eigentlichen Dateinamen (inklusive des letzten /):

discourse remap //die-lange-url-in-deinen-bildern-bis-zum-dateinamen /uploads/default/

Schritt 3 – Beiträge neu berechnen und App neu aufbauen:

rake posts:rebake
exit
./launcher rebuild app

Schritt 4 – S3 deaktivieren

  1. Deaktiviere S3-Uploads in den Einstellungen (oder in deiner app.yml, falls du sie so eingerichtet hast). Wenn du einen CDN verwendet hast, entferne auch den Link dazu aus der Einstellung (sonst wird es nicht wirklich deaktiviert).
  2. Schalte deinen Container aus. Ich habe das getan, indem ich den Inhalt zunächst als Backup in einen neuen Container verschoben habe.

Whew! Fertig. Bisher bin ich auf keine Probleme gestoßen. Geh und teste es aus!

10 „Gefällt mir“

Gute Arbeit! Ich glaube, das sind die Schritte, die mir schließlich zum Erfolg verholfen haben, aber ich habe viele verschiedene Remaps ausprobiert, die nicht so gut funktioniert haben! Es ist großartig, jetzt formelle Anweisungen zu haben.

4 „Gefällt mir“