Django 1.7 für die Arbeit mit Google App Engine

7

Kann uns jemand helfen, uns Anweisungen zu geben, wie man Django & gt; 1.5 bei Google App Engine zum Laufen bringt? Ich habe eine Reihe von Leuten gesehen, die behaupten, dass Django 1.6 funktioniert. Wir möchten 1.6 oder 1.7 laufen lassen. Ich habe hier nach Anweisungen zur Einrichtung gesucht. Bisher kein Glück.

Aktualisierung: In unserer Entwicklungsmaschine haben wir Django 1.7 installiert (sowohl / user / local als auch auf virtualenv). Wenn wir jedoch GAE Yaml modifizieren, um Django 1.7 zu verwenden, erhalten wir die folgenden Fehlermeldungen:

%Vor%

Die Version 1.9.12, die GoogleAppEngine sdk im Verzeichnis /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib installiert, enthält die folgenden aufgeführten Django-Versionen:

  1. django-0.96 django-1.2 django-1.3 django-1.4 django-1.5

Meine Frage bezieht sich darauf, wie wir unsere Entwicklungsumgebung für Django 1.7 auf Google App Engine korrekt einrichten und sicherstellen, dass wir unsere App mit Django 1.7 erfolgreich bereitstellen, wenn wir sie in der Produktion von Google App Engine bereitstellen. Wie können wir Django 1.7 bei der Bereitstellung unserer App auf GAE bereitstellen?

    
Sunny 05.10.2014, 21:18
quelle

3 Antworten

19
  

Sie können in Ihrer Google App Engine-Anwendung beliebige reine Python-Third-Party-Bibliotheken verwenden. Um eine Bibliothek eines Drittanbieters zu verwenden, fügen Sie einfach die Dateien in das Verzeichnis Ihrer Anwendung ein und sie werden mit Ihrer Anwendung hochgeladen, wenn Sie sie auf unserem System bereitstellen. Sie können die Dateien wie andere Python-Dateien mit Ihrer Anwendung importieren.

Ich habe eine Anwendung mit Django 1.7 auf diese Weise und alles funktioniert gut. Manchmal müssen Sie jedoch aufgrund der Einschränkungen von App Engine und ihrer Besonderheiten etwas hacken. Aber es hängt von Ihren Anwendungsfällen ab.

Ich würde auch vorschlagen, eine virtuelle Umgebung für Ihr Projekt zu verwenden. Installieren Sie jede Bibliothek, die nicht von App Engine unterstützt wird, direkt über pip und erstellen Sie dann einen Symlink in Ihrem Anwendungsverzeichnis, der auf die angegebene Bibliothek verweist.

Auf diese Weise können Sie alle erforderlichen Pakete in einer Datei (z. B. requirements.txt) aufbewahren, die im SCM-System (z. B. Git) zusammen mit Ihren Quelldateien gespeichert werden kann, und andere Teammitglieder können Ihre Arbeitsumgebung problemlos replizieren.

Wenn Sie eine virtuelle Umgebung verwenden und alle benötigten Bibliotheken (Django, ...) über pip installieren, ist hier das Verzeichnis-Layout, das für Sie funktionieren sollte.

  • virtueller-env-root
    • .Python
    • bin
    • include
    • lib
    • App-Engine-Projekt-Wurzel
      • app.yaml
      • django-project-root
      • django-app-root
      • Symlink-zu-Django - & gt; lib / python2.7 / site-packages / django
      • symlink-zu-anderer-lib - & gt; lib / python2.7 / site-packages /...

Ein solches Layout kann einfach mit dem folgenden Befehl implementiert werden.

%Vor%

Oder mit dem App Engine-Entwicklungsserver getestet.

%Vor%

AKTUALISIEREN

Seit App Engine Python SDK Version 1.9.15 können Sie den Mechanismus finding verwenden um Bibliotheken von Drittanbietern einzurichten. Sie müssen keine Symlinks in Ihrem Anwendungsverzeichnis erstellen, die auf den Python-lib-Ordner verweisen.

Erstellen Sie ein lib-Verzeichnis direkt in Ihrem Anwendungsstammverzeichnis und teilen Sie Ihrer App mit, wie Sie Bibliotheken in diesem Verzeichnis mithilfe von appengine_config.py file finden.

%Vor%

Es folgt ein neues Verzeichnislayout.

  • virtueller-env-root
    • .Python
    • bin
    • include
    • lib
    • App-Engine-Projekt-Wurzel
      • lib
      • app.yaml
      • appengine_config.py
      • django-project-root
      • django-app-root

Verwenden Sie pip mit dem Flag -t lib, um Bibliotheken in diesem Verzeichnis zu installieren.

%Vor%

Oder

%Vor%     
pgiecek 06.10.2014, 08:10
quelle
2

Sie können nicht - GAE unterstützt nur 1.5 und selbst das ist als experimentell markiert. Wenn Sie django 1.7 benötigen, sollten Sie vielleicht die Google Compute Engine verwenden, die den Markennamen von Google für virtuelle Maschinen darstellt spule hoch.

Wenn Sie nicht mit Google App Engine verheiratet sind, unterstützt Heroku django 1.7 ohne Probleme.

  

Gibt es eine spezielle Anleitung zum Verschieben eines Django 1.7-Projekts?   Google Compute Engine? Es gibt eine Menge Google-Sachen ohne irgendwelche   Anleitungen, wie man sie zum Laufen bringt.

Hier sind die Schritte, aber sie sind die gleichen, hatten Sie auf einem anderen Server bereitgestellt, weil GCE Ihnen nur eine Linux-Instanz gibt:

  1. Stellen Sie zunächst sicher, dass Ihrem Entwicklerkonto eine Abrechnungsmethode zugeordnet ist.
  2. Rufen Sie die Entwicklerkonsole auf
  3. Erstellen Sie ein neues Projekt, indem Sie auf Projekte und dann auf Projekt erstellen klicken.
  4. Warten Sie, bis das Projekt erstellt wurde (unten rechts auf dem Bildschirm wird ein Fortschrittsfenster angezeigt).
  5. Sobald das Projekt fertig ist, wird die Konsole automatisch zu den Einstellungen dieses Projekts wechseln:

  1. Sie können eine neue Instanz erstellen oder eine vorgefertigte Vorlage aus der zweiten Spalte bereitstellen. Sie können sehen, dass es beliebte Stacks und Softwareanwendungen gibt, für die Vorlagen erstellt werden.

  2. Da es noch keine Django-Vorlage gibt , erstellen Sie zunächst eine Instanz.

  3. Die Abrechnung wird pro Projekt gesteuert, sodass Sie die Abrechnung zu diesem Zeitpunkt aktivieren können, wenn Sie dies noch nicht getan haben.

  4. Auf der nächsten Seite konfigurieren Sie die Instanz. Die Felder sind selbsterklärend. Sie legen den Typ der Maschine fest (wie viele virtuelle CPUs und Arbeitsspeicher), wo (physisch) Sie die Maschine bevorzugen, wenn sowohl HTTP- als auch HTTPS-Ports geöffnet sein sollen, und dann ein Disk-Image, von dem die Instanz gestartet wird :

Sobald Sie das Gerät konfiguriert haben, wird es online hochgefahren und Sie haben Zugriff auf das Terminal per SSH.

Ab diesem Punkt sollten Sie diese Instanz wie einen beliebigen Linux-Server behandeln. Installieren Sie alles, was Sie benötigen, um Ihr Projekt mit den normalen Packaging-Tools zum Laufen zu bringen. Lade deine Dateien hoch, etc.

Für Amazon ist der Prozess etwas einfacher, da es eine gibt große Bibliothek von AMIs , die Sie für einen Ein-Klick-Bereitstellungsprozess verwenden können. AMI ist Amazon Machine Image - eine Vorlage, von der Sie eine Instanz bereitstellen können.

Für Heroku, als PaaS, müssen Sie sich nicht um die Hardwarekomponenten kümmern; Wie bei den meisten PaaS-Plattformen haben Sie jedoch keinen Schreibzugriff auf das Dateisystem. Um Ihre statischen Werte zu verwalten, müssen Sie zusätzliche Arbeit leisten. Am einfachsten ist es, einen S3-Bucket auf Amazon zu erstellen und diesen mit django-storages zu verwenden. Das offizielle Django-Tutorial bei Heroku schlägt die Verwendung von dj-static vor, um Dateien direkt von Heroku aus zu bedienen. Dies funktioniert gut zum Testen, aber wenn Sie mit dem Hochladen von Dateien beginnen möchten, müssen Sie diese korrekt behandeln.

Aber sobald Sie das erledigt haben, sind die Schritte noch einfacher:

Voraussetzungen:

Die grundlegenden Schritte:

  1. Erstellen Sie ein git-Repository (falls noch nicht geschehen) in Ihrem Quellcodeverzeichnis mit git init .
  2. Erstellen Sie ein requirements.txt im Stammverzeichnis Ihres Projekts . pip freeze > requirements.txt sollte es tun, wenn Sie eine virtuelle Umgebung verwenden. Andernfalls können Sie eine Textdatei erstellen und die benötigten Pakete auflisten.
  3. Passen Sie Ihre settings.py an, indem Sie diese Zeile ganz unten hinzufügen: import dj_database_url DATABASES['default'] = dj_database_url.config()
  4. Erstelle ein Procfile (Fall ist wichtig). So sagen Sie Heroku, welche Art von Dyno (Prozess) Sie für Ihre Anwendung benötigen. Für Django benötigen Sie einen Webdyno, also sollte in dieser Datei die folgende Zeile stehen: web: gunicorn yourproject.wsgi --log-file -

Erstellen Sie eine App auf Heroku und stellen Sie sie bereit. Sie sollten diese Befehle aus Ihrem Quellcodeverzeichnis ausführen:

  1. heroku create --buildpack https://github.com/heroku/heroku-buildpack-python
  2. heroku addons:add heroku-postgresql:dev
  3. git push heroku master
  4. heroku run python yourproject/manage.py migrate --noinput
  5. heroku run python web/manage.py collectstatic

Sie machen nur die ersten beiden Schritte, wenn Sie Ihre Anwendung aktualisieren müssen, einfach git push heroku master , um eine neue Revision auf Heroku zu erstellen.

    
Burhan Khalid 05.10.2014 22:22
quelle
1

Die Python-Umgebung von App Engine kann derzeit Django über den Konfigurationsmechanismus libraries: bis Version 1.5 bereitstellen. Das bedeutet nicht, dass spätere Versionen von Django nicht funktionieren, nur dass sie noch nicht eingebaut sind. (Ich bin mir nicht sicher, warum die neueste integrierte Version 1.5 ist. Es könnte etwas mit AE's historischem zu tun haben Richtlinie zur Bündelung jeder unterstützten Version von Django mit dem SDK, die wahrscheinlich überarbeitet werden muss, damit das SDK nicht zu groß wird.)

Sie können versuchen, Django 1.7 in Ihre Anwendungsdateien aufzunehmen. Ich habe das mit 1.7 noch nicht probiert, aber es hat mit früheren Versionen funktioniert. Einige Anpassungen von sys.path werden in Ihrem main.py benötigt.

Beachten Sie, dass es ein Limit von 10.000 Anwendungsdateien gibt. Wenn Sie sich für dieses Limit interessieren, können Sie Pythons Zipimport verwenden und Django als Zip-Archiv hinzufügen. Ссылка

    
Dan Sanderson 06.10.2014 04:17
quelle