Nachdem ich die Bilder und Assets (js) meiner Seite auf S3 verschoben habe, habe ich versucht, das Forum über die Schnittstelle /admin/upgrade zu aktualisieren. Die Aktualisierung verlief problemlos, aber es scheint, als wären die Assets nicht in den S3-Bucket hochgeladen worden, was meine Seite unbrauchbar machte, bis ich die App von der Shell aus neu erstellt habe.
Dort habe ich einen Hook, der dies für mich erledigt. Es wäre schön, eine solche Funktionalität auch in der Weboberfläche zu haben. Ich weiß nicht, ob dies bereits vorhanden ist. Falls ja, lass es mich bitte wissen.
Nein, Sie können Assets nicht über den Admin-Bereich nach S3 verschieben. Sie müssen dies über SSH durchführen, da bei dieser Migration zusätzliche Aufgaben erforderlich sind, es sei denn, Sie führen dies auf einer frischen Installation durch.
Ah, ich verstehe. Mir gefiel die nahtlose Upgrade-Methode ohne Ausfallzeit, bis ich auf S3 umgestiegen bin. Gibt es eine Möglichkeit, JS nicht über S3 auszuliefern, sondern nur Bilder?
Ja, ich liefere JS nicht direkt von S3; es wird in S3 gespeichert und dann über ein CDN bereitgestellt. Was ich fragen wollte, ist, ob ich JS lokal speichern und über ein CDN ausliefern kann, wobei nur die Medien auf S3 gespeichert werden.
Du liegst wieder einmal komplett falsch.
Discourse JS soll direkt über das CDN ausgeliefert werden, wobei die Discourse-Installation als Pull-Origin dient. Ich weiß nicht, wie du JS in S3 unterbringen würdest, aber bedenke, dass JS bei jedem Neuaufbau neu generiert wird. Alles, was du über S3 ausliefern würdest, wäre wahrscheinlich veraltet, und du würdest dir nur mehr Ärger einhandeln.
Deshalb wurde der Hook after_assets_precompile hinzugefügt, um die aktualisierten Assets auf S3 hochzuladen.
Wie behebe ich das? Wenn ich versuche, über den lokalen Server auf ein Asset zuzugreifen, erhalte ich einen 404-Fehler. Der Zugriff muss über S3 erfolgen. Andernfalls hätte ich eine Edge-Routing-Regel auf meinem CDN eingerichtet, um Asset-Anfragen über die lokale Domain abzufragen.
Mit lokaler Domain meinte ich den Server, auf dem mein Discourse installiert ist, also dass die JS-Dateien lokal auf dem Nginx-Server und nicht auf S3 lagen.