2016-08-09 1 views
2

J'ai donc cette application basée sur la pyramide Python, et mon flux de travail de développement consiste essentiellement à télécharger les fichiers modifiés directement dans la zone de production. En approche du lancement, et évidemment cela ne va plus fonctionner.Essayer de créer une instance de développement pour un projet pyramide Python

J'ai réussi à modifier les chaînes de connexion et le fichier development.ini et à pointer l'instance de développement vers une base de données secondaire.

Maintenant je dois juste trouver comment créer une autre copie du projet quelque part où je peux travailler sur des choses et puis faire les changements vivants. Dans un premier temps, j'ai pensé que je pouvais simplement faire une copie du répertoire du projet ailleurs et l'exécuter avec différents arguments pointant vers le nouvel emplacement. Cela n'a pas fonctionné.

Ensuite, j'ai mis en place un tout nouveau projet appelé myproject-dev. J'ai parcouru les instructions de configuration:

J'ai utilisé pcreate, puis j'ai développé setup.py, puis j'ai copié mon développement.ini depuis mon projet et j'ai soigneusement édité les différentes références à myproject-dev au lieu de myproject. Ensuite, initialize_myproject-dev_db /var/www/projects/myproject/development.ini

Enfin, je reçois une belle pyramide page d'accueil que tout fonctionne correctement. Je pensais à ce moment-là que je pouvais tout faire sauter dans le répertoire du projet et copier les fichiers du projet principal, mais alors j'ai eu ce sentiment dans le creux de mon estomac quand j'ai remarqué que beaucoup de choses n'étaient pas fonctionne, comme les URL statiques.

Apparemment, je référence myproject dans les URLs includes et static, et qui sait où d'autre.

Je ne pense pas que cette idée va marcher, alors j'ai abandonné pour l'instant. Est-ce que quelqu'un peut me donner une idée de la façon dont les gens vont configurer une instance de développement pour un projet de pyramide Python?

+0

Ce chemin '/ var/www/projects/myproject/development.ini' m'inquiète - cela signifie-t-il que si je vais sur http://yoursite.com/projects/myproject/development.ini, ça va me montrer le contenu de ce fichier, avec le mot de passe de base de données et tout? – Sergey

+0

Non, je viens juste de PHP et c'était un endroit qui avait du sens pour moi. Je réalise maintenant que ça pourrait aller n'importe où. Je cours tout en utilisant un chemin complet vers l'environnement virtuel Python. Tout est servi par WSGI, et je ne peux rien obtenir sans utiliser le serveur WSGI –

Répondre

2

La première chose que vous devriez faire, si ce n'est pas le cas, c'est que la version contrôle votre projet. Je recommande d'utiliser git. Outre les avantages de la gestion des modifications apportées à l'application lors du développement, il sera également plus facile de partager des copies entre développeurs ... ou avec le déploiement de production. En effet, la production peut simplement être un git clone du projet, tout comme votre instance de développement.

La deuxième chose est que vous devez installer le projet dans votre chemin de bibliothèque Python. C'est ainsi que tous les import et include vont fonctionner.

Je vous recommande de créer un environnement virtuel pour cela, soit virtualenv ou pew, afin que votre application (et ses dépendances) soient «isolées» du reste de votre système et d'autres applications. Vous avez probablement un script setup.py dans votre projet. Si ce n'est pas le cas, create one. Ensuite, installez votre projet avec pip install . en production, ou pip install -e . en développement.

+0

Merci beaucoup pour les conseils. J'ai effectivement le projet dans le contrôle de la source et toutes mes bibliothèques Python sont installées dans un environnement virtuel. Le problème est que je dois faire référence au nom du projet dans divers endroits, par exemple quand je suis modèles importateurs: de DBSession d'importation myproject.models.meta de myproject.models.users importent utilisateur de myproject.models .users importer des employés et aussi dans les références statiques: $ {request.static_url (monprojet: statique/admin/css/main.css')} Je ne peux pas passer par lors du déploiement et démarrer la recherche et le remplacement mon code. –

+0

@JeremyT: Vous avez besoin de deux environnements virtuels distincts pour que chacun puisse avoir son propre module 'myproject' (et éventuellement différentes versions d'autres bibliothèques que votre application utilise). En plus de virtualenv, vous pouvez aussi voir 'zc.buildout'. Jetez également un coup d'oeil à 'fabric' comme une alternative au déploiement via git – Sergey

+0

@Sergey avait peur de cela, mais c'est logique. Il m'a juste fallu une éternité pour mettre en place cet environnement virtuel –

1

Voilà comment je réussi ma dernière application Pyramid:

J'ai eu à la fois un development.ini et un production.ini. J'avais en fait un development.local.ini en plus des deux autres - un pour le développement local, un pour notre système de «test» et un pour la production. J'ai utilisé git pour le contrôle de version, et j'avais une branche principale pour les déploiements de production. Sur mon serveur prod, j'ai créé l'environnement virtuel, etc., puis j'allais tirer ma branche principale et courir en utilisant le fichier de configuration production.ini. Les mises à jour consistaient essentiellement à revenir dans virtualenv et à extraire les dernières mises à jour du dépôt, puis à redémarrer le serveur de la pyramide.