Ich betreibe einen Webserver, der es Benutzern ermöglicht, Bilder auf den Server hochzuladen. Allerdings verwende ich git um meinen Quellcode zu verwalten, und die git push
Der Vorgang löscht alles auf dem Server, was nicht mit meiner lokalen Kasse übereinstimmt. Daher verliere ich die Bilder bei jeder Ausführung git push
!
Zuerst dachte ich, dass ich das vielleicht könnte schützen den Uploads-Ordner, also habe ich all diese Dinge ausprobiert, wie in anderen Beiträgen vorgeschlagen:
- Hinzufügen des Verzeichnisses zu .gitignore,
git rm --cached -r uploads
git update-index --assume-unchanged uploads
Keines davon löst das Problem – das Remote-Verzeichnis verschwindet immer, wenn ich es tue git push
.
Als nächstes entschied ich mich, die hochgeladenen Dateien außerhalb des Arbeitsbereichs von git zu platzieren, damit git push
löscht es nicht. Dann habe ich eine erstellt symbolischer Link vom öffentlichen Verzeichnis in das private Verzeichnis, damit ich die Dateien öffentlich sehen kann. So weit so gut… Allerdings immer wenn ich laufe git push
es löscht den symbolischen Link!
Schließlich dachte ich, dass ich vielleicht einen gebrauchen könnte nach Erhalt Git-Hook, um den symbolischen Link jedes Mal zu erstellen, wenn ich pushe, aber mein Webserver (Openshift) verwendet diesen Hook bereits für etwas anderes und erlaubt mir nicht, ihn zu bearbeiten.
Dafür gibt es doch sicher eine einfache Möglichkeit?! Bitte helfen Sie!
Sie sollten Symlinks in OPENSHIFT_DATA_DIR erstellen, indem Sie den Aktions-Hook Deploy verwenden. Ein Beispiel dafür finden Sie im WordPress-Schnellstart hier: https://github.com/openshift/wordpress-example/blob/master/.openshift/action_hooks/deploy
Das OPENSHIFT_DATA_DIR bleibt zwischen Bereitstellungen bestehen, wird jedoch NICHT von Gears in einer skalierten Anwendung gemeinsam genutzt.
Wie die meisten Platform-as-a-Service-Anbieter stellt OpenShift a ganz neue Version Ihrer Bewerbung jedes Mal, wenn Sie push
. Standardmäßig wird alles, was nicht von Git verfolgt wird, nicht in die neue Version aufgenommen.
Sie haben ein paar Möglichkeiten:
-
OpenShift unterstützt persistente Datenspeicherung in einem speziellen Verzeichnis:
Die bewährte Methode zum Speichern von Dateien, die über Bereitstellungen hinweg bestehen bleiben müssen, besteht darin, das Verzeichnis „data“ zu verwenden, das sich eine Ebene über Ihrem Git-Repository befindet. Sie können die Umgebungsvariable $OPENSHIFT_DATA_DIR verwenden, um darauf auf dem Host zu verweisen. Beispielsweise:
Wenn Sie eine PHP-App namens “Bunny” erstellen. Die php/index.php-Datei des Repos wird bereitgestellt in:
~/{Kassettenname}/repo/php/index.php
Das Datenverzeichnis wird dann bereitgestellt
~/{Patronenname}/app-root/data/
Wenn Sie also aus Ihrer php/index.php-Datei eine Datei unter “../../../data/blah.txt” speichern, wird sie außerhalb Ihres Repo-Verzeichnisses in das Datenverzeichnis gestellt.
-
Speichern Sie generierte / hochgeladene Assets an anderer Stelle.
Dies ist der von PaaS-Anbietern favorisierte Ansatz Heroku. Anstatt Benutzer-Uploads und andere generierte Inhalte auf dem PaaS-Server zu speichern, Speichern Sie es auf etwas wie Amazon S3.
Ja, das Git-Repository, zu dem Sie pushen, sollte kein Repository mit einem Arbeitsverzeichnis sein. Es sollte ein sein bare
Repository, das mit initiiert wird
git --bare init
Wenn Sie immer noch auf dem Zielcomputer arbeiten möchten, wäre die beste Lösung, zwei Repositories zu verwenden (eines ohne und eines ohne), Sie pushen auf das Bare und ziehen dann mit einem Hook auf Normal. Ein Beispiel für dieses Setup finden Sie hier Hier.
.
Sie müssen sich verpflichten, bevor Sie pushen.
– Antony D’Andrea
5. Februar 15 um 9:11 Uhr
Ja, natürlich, aber die auf dem Server erstellten Dateien befinden sich niemals in meinem Arbeitsverzeichnis, um sie zu übergeben
– Ians
6. Februar 15 um 12:04 Uhr