Bilder wurden nach der Konfiguration von S3-Uploads nicht geladen

Hallo. Wir haben gerade von Discourse EC2 zu Discourse ECS (Container-Dienst) migriert. Während wir noch auf EC2 waren, war S3-Uploads noch nicht eingerichtet. Vor der Migration haben wir alle Bilder von EC2 in den S3-Bucket kopiert (mit öffentlichem Zugriff). Nach der Migration mit aktiviertem S3-Uploads (noch ohne CDN) stellten wir jedoch fest, dass Bilder (und Avatare) überhaupt nicht geladen wurden.

In app.yml steht:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: aws_access_key
  DISCOURSE_S3_SECRET_ACCESS_KEY: aws_secret_key
  DISCOURSE_S3_BUCKET: <uploads-bucket>
  DISCOURSE_S3_BACKUP_BUCKET: <backups-bucket>
  DISCOURSE_BACKUP_LOCATION: s3

hooks:
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets

Auch das Ausführen folgender Befehle im Container hat nicht geholfen:

rake posts:rebake
rake posts:missing_uploads
rake avatars:refresh

Außerdem haben wir einen Unterschied zwischen den URLs der Bilder festgestellt (Discourse verwendete weiterhin die URLs für „lokale Uploads in EC2“).

Dies ist der Link in S3: https://[s3-bucket].s3.amazonaws.com/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

Link in Discourse (URL stammt weiterhin von den EC2-Uploads): https://[domain]/uploads/default/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

Der Fehler im Browser lautet: 404 NOT FOUND

Wie konfigurieren wir Discourse, damit es die korrekten S3-URLs für die Bilder verwendet?

Hast du den Rake-Task ‘migrate to S3’ ausgeführt?

Ich würde das vor der Migration auf der EC2 instanz durchführen.

1 „Gefällt mir“

Hallo Jay. Ich habe versucht, den Befehl in ECS auszuführen, bin aber auf einen Fehler gestoßen:

Nur zur Klärung: Sollte dies ausschließlich auf EC2 ausgeführt werden? Gibt es eine andere Möglichkeit, Uploads zu migrieren oder Bild-URLs zu aktualisieren? Derzeit ist die EC2-Instanz gestoppt, und die aktuelle ECS-Umgebung nutzt bereits die Domain sowie die Datenbank/Cache. Ich bin mir daher nicht sicher, ob wir die Domain und die Datenbank/Cache ohne Ausfallzeit wieder auf die alte EC2 zurückführen (und dann neu aufbauen) können. Vielen Dank.

Sie möchten den Befehl in einer Instanz ausführen, die Zugriff auf die Bilder hat. Oh, aber wenn Sie sie selbst manuell nach S3 verschoben haben, dann möchten Sie vielleicht stattdessen einige Änderungen an der uploads-Tabelle vornehmen.

Ich arbeite an einer Anleitung mit Anweisungen zum Verschieben von einem Bucket in einen anderen, die Sie möglicherweise nutzen können, um Ihr Problem zu lösen. Allerdings müssen Sie diese Anweisungen anpassen, um Ihre lokalen-zu-Bucket-Änderungen anstelle von Bucket-zu-Bucket-Änderungen zu berücksichtigen.

Wenn ich Ihnen einen Pauschalpreis für den Job berechnen würde, würde ich wahrscheinlich 4 Stunden in Rechnung stellen, obwohl es bei einer Stundenzahlung vielleicht nur eine Stunde wäre.

Oh! Entschuldigung. Ich habe das gerade bemerkt. Wenn die EC2 dieselbe Datenbank verwendet, können Sie sie möglicherweise wieder hochfahren (wobei die ECS vor Ort bleibt) und die migrate-to-s3-Aufgabe dort ausführen. Sie müssen zuvor alle S3-Elemente in Umgebungsvariablen (ENV) wie in Verwendung von Objektspeicher für Uploads (S3 & Clones) beschrieben hinterlegen. Dies ist wahrscheinlich die einfachste Lösung. Ich empfehle, vor dem Start ein Backup nur der Datenbank durchzuführen.

1 „Gefällt mir“

Hallo Jay. Danke für die Rückmeldung. Verstanden. Ich denke, das wird funktionieren.

1 „Gefällt mir“