
Anleitungen im Zusammenhang mit Beach
Wie man alle Assets von einer Beach Instanz herunter- und hochlädt
Lade Flow-Ressourcen aus dem Cloud-Speicher der Instanz für die lokale Entwicklung herunter.
Übersicht
In dieser Anleitung wird erklärt, wie du alle Fotos, Dokumente und andere Assets, die in einer Beach Instanz gespeichert sind, auf deinen lokalen Rechner herunterladen oder diese Assets von deiner lokalen Installation auf eine Beach Instanz hochladen kannst.
Bevor du mit dieser Anleitung beginnst, benötigst du Folgendes
- eine laufende Beach Instanz
- einen funktionierenden SSH-Zugang zu deiner Instanz
- eine Installation desselben Neos / Flow-Projekts auf deinem lokalen Rechner, mit einem frischen Datenbank-Dump von deiner Beach Instanz
- Lokale Beach
Hintergrundinformationen
Deine Beach Instanz nutzt Google Cloud Storage zum Speichern und Bereitstellen der dauerhaften Ressourcen der Neos Website oder Flow-Anwendung. Das bedeutet, dass der Ordner Data/Persistent/Resources deiner Instanz leer ist und du die Assets stattdessen aus dem Google Cloud Storage Bucket herunterladen musst.
Der Unterschied zwischen privaten und öffentlichen Buckets
Flow speichert alle Original-Assets in einem "Speicher" und dieser Speicher enthält die originalen und generierten Assets deiner Website. In Flow sprechen wir von "Ressourcen", was im Grunde ein anderer Name für "Dateien" ist.
Die Ressourcen im Speicher werden normalerweise automatisch in einem "Ziel" veröffentlicht. Du könntest zwei verschiedene Google Cloud Storage Buckets verwenden - einen für den Flow-Speicher und einen für das Flow-Ziel - aber da alle Ressourcen ohnehin öffentlich sind, haben wir die Konfiguration so optimiert, dass nur ein Bucket benötigt wird.
Beachte, dass du in älteren Beach Projekten möglicherweise noch einen "Storage"- und einen "Target"-Bucket anstelle von "Private" und "Public" hast. Auch wenn sie anders benannt sind, funktionieren sie genauso wie die Buckets "privat" und "öffentlich".
Wenn du also Ressourcen von einer Beach Instanz hoch- oder herunterladen möchtest, hast du es normalerweise nur mit dem "public.*" Bucket zu tun.
In der Datenbank gespeicherte Ressourceninformationen
Neos und Flow halten auch alle Ressourcen in bestimmten Datenbanktabellen fest. Hier werden Metadaten wie z. B. Dateinamen gespeichert. Deine Anwendung braucht immer diese beiden Komponenten, die Binärdaten aus deinem Speicher und die Metadaten in der Datenbank, um zu funktionieren. Achte also darauf, dass der Zustand der Datenbank mit dem aktuellen Zustand deiner Ressourcen übereinstimmt. Tools wie ./flow resource:clean können dir dabei helfen, herauszufinden, ob die Datenbank mit dem aktuellen Satz an Ressourcendateien übereinstimmt.
Schritte zum Herunterladen deiner Assets
Wir verwenden ein Tool namens "Local Beach" zum Herunterladen der Ressourcen. Es gibt eine spezielle Anleitung, wie du Local Beach einrichtest. Wenn du das noch nicht getan hast, befolge bitte die dort genannten Schritte.
Als Nächstes musst du den Instance Identifier deiner Instanz herausfinden. Du findest ihn ganz oben in der Instanzansicht der Benutzeroberfläche von Beach. Als Nächstes musst du den Namespace herausfinden, in dem dein Projekt in unserem Cluster läuft. Diesen findest du auf der Projektseite im Block "Allgemein" als "Namespace", zum Beispiel "beach".
Wenn du das hast, gehst du zurück zur Befehlszeile und navigierst zum Stammverzeichnis deines Projekts. Jetzt kannst du alle Ressourcen aus der Cloud in dein lokales Projekt herunterladen:
beach resource-download --instance instance-7018519e-xxxx-yyyy-zzzz-a01cbbab0fc6 --namespace beach
Vergewissere dich abschließend, dass die Datenbank deines lokalen Projekts mit der Datenbank deiner Beach Instanz übereinstimmt, damit dein lokales Neos oder Flow tatsächlich alle Ressourcen kennt, die es jetzt in Data/Persistent/Resources/
Hinweis zu älteren Beach Instanzen (a.k.a. ältere Flow/Neos Setups)
Bei älteren Beach Instanzen (bzw. allen, die aus irgendeinem Grund keine unterteilten Pfade für die Asset-Speicherung verwenden) muss etwas beachtet werden.
Wenn Flow nach dem Herunterladen deiner Assets behauptet, dass es diese Assets lokal nicht finden kann, liegt das wahrscheinlich daran, dass sie lokal in Hash-Verzeichnisse heruntergeladen wurden (z.B. Data/Persistent/Resources/a/b/abcde...), Flow aber erwartet, dass sie sich alle im selben Ordner befinden. Das liegt daran, dass der Standardwert für subdivideHashPathSegment in Flow 6.0 von false auf true geändert wurde (siehe PR #1689) und der Download-Befehl den aktuellen Standard annimmt.
Dies kann auf verschiedene Arten behoben werden:
- Du kannst alle Dateien aus ihren Unterordnern in den obersten Ressourcenordner verschieben
- Du kannst die Option subdivideHashPathSegment auf true setzen:
Neos:
Flow:
resource:
targets:
localWebDirectoryPersistentResourcesTarget:
targetOptions:
subdivideHashPathSegment: true
Schritte zum Hochladen deiner Assets
Das Hochladen funktioniert im Grunde wie das Herunterladen. Bevor du Ressourcen auf deine Instanz hochlädst, überprüfe bitte, ob du die richtige Instanzkennung und den richtigen Projektnamensraum kopiert hast. Du willst ja nicht aus Versehen deine Produktionswebsite durcheinander bringen ...
Der Upload-Befehl kopiert die Ressourcen in deine Instanz, die die folgenden beiden Kriterien erfüllen:
- sie existieren in deinem lokalen Verzeichnis Data/Persistent/
- sie haben einen entsprechenden Eintrag in der Ressourcendatenbank-Tabelle deines lokalen Beach Projekts
Ressourcen werden nur hinzugefügt (kopiert), niemals gelöscht.
Wenn du bereit bist, startest du den Upload wie folgt:
beach resource-upload --instance instance-7018519e-xxxx-yyyy-zzzz-a01cbbab0fc6 --namespace beach
Der Upload kann den MIME-Typ der hochgeladenen Assets auf application/octet-stream setzen, was zu unerwarteten Ergebnissen führen kann (z.B. werden PDF-Dateien heruntergeladen, anstatt im Browser angezeigt zu werden).
Achte darauf, dass du ihn von der Instanz Beach aus ausführst, auf die du hochgeladen hast, nachdem du dich über SSH bei dieser Instanz angemeldet hast!
./flow gcs:updateresourcemetadata