2016-08-09 22 views
2

Also habe ich diese Python-Pyramiden-basierte Anwendung, und mein Entwicklungs-Workflow war im Grunde nur dazu, geänderte Dateien direkt in den Produktionsbereich hochzuladen.Der Versuch, eine Entwicklungsinstanz für ein Python-Pyramidenprojekt zu erstellen

Kurz vor dem Start, und das wird natürlich nicht mehr funktionieren.

Ich habe es geschafft, die Verbindungszeichenfolgen und development.ini zu bearbeiten und die Entwicklungsinstanz auf eine sekundäre Datenbank zu verweisen.

Jetzt muss ich nur herausfinden, wie ich irgendwo eine andere Kopie des Projekts erstellen kann, wo ich an den Dingen arbeiten und dann die Änderungen live machen kann.

Zuerst dachte ich, ich könnte einfach eine Kopie des Projektverzeichnisses woanders erstellen und es mit anderen Argumenten ausführen, die auf den neuen Speicherort verweisen. Das hat nicht funktioniert.

Dann habe ich im Grunde genommen ein völlig neues Projekt namens myproject-dev eingerichtet. Ich ging die Setup-Anweisungen:

Ich nutzte pcreate, und dann setup.py entwickeln, und dann kopierte ich über meine development.ini aus meinem Projekt und sorgfältig die verschiedenen Verweise auf myproject-dev anstelle von myproject bearbeitet. Dann , initialize_myproject-dev_db /var/www/projects/myproject/development.ini

Schließlich bekomme ich eine schöne Pyramide Begrüßungsseite, dass alles richtig funktioniert.

Ich dachte an diesem Punkt konnte ich einfach alles im Projektverzeichnis ausblasen und über die Hauptprojektdateien kopieren, aber dann bekam ich dieses Gefühl in der Magengrube, als ich bemerkte, dass viele Dinge nicht waren funktioniert, wie statische URLs.

Offenbar referenziere ich myproject in includes und auch statische URLs, und wer weiß wo sonst.

Ich glaube nicht, dass diese Idee funktionieren wird, also habe ich jetzt aufgegeben.

Kann mir jemand eine Vorstellung davon geben, wie Leute eine Entwicklungsinstanz für ein Python Pyramidenprojekt einrichten?

+0

Das '/ var/www/projects/myproject/development.ini' Weg beunruhigt mich - bedeutet es, dass wenn ich zu http://yoursite.com/projects/myproject/development.ini gehen werde es mir zeigen Der Inhalt dieser Datei, mit Datenbank-Passwort und alles? – Sergey

+0

Nein, ich komme gerade von PHP und das war ein Ort, der für mich Sinn ergab. Ich erkenne jetzt, dass es wirklich überall hingehen könnte. Ich verwende alles unter Verwendung eines vollständigen Pfades zur virtuellen Python-Umgebung. Alles wird von WSGI bedient, und ich kann nichts erhalten, ohne den WSGI-Server laufen zu lassen. –

Antwort

2

Das erste, was Sie tun sollten, wenn dies nicht der Fall ist, ist die Versionskontrolle Ihres Projekts. Ich würde empfehlen, Git zu verwenden.

Zusätzlich zu den Vorteilen der Verwaltung der Änderungen, die bei der Entwicklung an der Anwendung vorgenommen werden, wird es die gemeinsame Nutzung von Kopien zwischen Entwicklern oder der Produktionsbereitstellung erleichtern. In der Tat kann die Produktion nur eine git clone des Projekts sein, genau wie Ihre Entwicklungsinstanz.

Die zweite Sache ist, dass Sie das Projekt in Ihrem Python-Bibliothekspfad installieren müssen. So funktionieren alle import s und include s.

Ich würde empfehlen, dafür eine virtuelle Umgebung mit virtualenv oder pew zu erstellen, damit Ihre App (und ihre Abhängigkeiten) vom Rest Ihres Systems und anderen Apps "isoliert" sind.

Sie haben wahrscheinlich ein setup.py Skript in Ihrem Projekt. Wenn nicht, create one. Dann installieren Sie Ihr Projekt mit pip install . in Produktion oder pip install -e . in Entwicklung.

+0

Vielen Dank für die Tipps. Ich habe tatsächlich das Projekt in der Quellcodeverwaltung und alle meine Python-Bibliotheken sind in einer virtuellen Umgebung installiert. Das Problem ist, dass ich den Namen des Projektes an verschiedenen Stellen verweisen, zum Beispiel, wenn ich den Import Modelle bin: von myproject.models.meta Import DBSession von myproject.models.users Benutzer importieren von myproject.models .users importieren Mitarbeiter und auch in statischen Referenzen: $ {request.static_url (myproject: static/admin/css/main.css')} ich kann einfach nicht während des Einsatzes durchlaufen und starten Sie die Suche und das ersetzen mein Code. –

+0

@ JeremyT: Sie benötigen zwei separate virtuelle Umgebungen, so dass jeder sein eigenes 'myproject'-Modul (und möglicherweise verschiedene Versionen anderer Bibliotheken, die Ihre App verwendet) haben kann. Zusätzlich/alternativ zu virtualenv können Sie sich 'zc.buildout' anschauen. Werfen Sie auch einen Blick auf 'Fabric' als Alternative zur Bereitstellung über Git – Sergey

+0

@Sergey hatte Angst davor, aber es macht Sinn. Es dauerte nur für immer, um diese virtuelle Umgebung einzurichten –

1

Hier ist, wie ich meine letzte Pyramid App verwaltet:

ich hatten beide ein development.ini und ein production.ini. Ich hatte eine development.local.ini zusätzlich zu den anderen zwei - eins für lokale Entwicklung, eins für unser "Test" -System und eins für Produktion. Ich habe git für die Versionskontrolle verwendet und hatte einen Hauptzweig für Produktionsbereitstellungen. Auf meinem Prod-Server erstellte ich die virtuelle Umgebung usw., zog dann meinen Hauptzweig und führte die production.ini Konfigurationsdatei aus. Updates beinhalteten im Wesentlichen das Zurückspringen in den virtualenv und das Abrufen der neuesten Updates aus dem Repo, dann den Neustart des Pyramidenservers.