2009-08-10 5 views
3

Lorsque je lance le serveur Web `Coller 'en mode démon, il semble que ce dernier tue sa capacité de rechargement lorsque l'horodatage d'un fichier source est mis à jour.Coller (Python) Serveur Web - Autoreload Problème

Voici comment je commence le démon ...

cd ${project} && ../bin/paster serve --reload --daemon development.ini; cd ..; 

... qui contrecarre l'un des principaux points de l'utilisation de pâte (pour moi).

Est-ce que quelqu'un est tombé sur ceci ou sait ce que je fais mal? Pour être complet, le fichier que je modifie est un fichier de contrôleur.

La version est `PasteScript 1.7.3'

Répondre

5

Je crois que les deux options sont essentiellement incompatibles, puisque le reloader arrête le serveur avec un SIGTERM et le serveur démon-isée est imperméable à - et depuis daemon est destiné à être exécuté dans un environnement de production, et reload pour un environnement de développement/débogage, je suppose que leur incompatibilité n'est pas considérée comme une grande perte. J'imagine qu'un reloader personnalisé, adapté pour arrêter et redémarrer correctement le serveur démonisé, pourrait certainement être développé, mais je n'en connais aucun.

+1

Merci, c'est ce que j'avais besoin d'entendre. :) – Cyrus

+1

Le moniteur de fichiers pour --reload vérifie chaque fichier source toutes les secondes et peut utiliser une quantité importante de temps CPU. Vous ne devriez jamais utiliser cela dans la production. Si vous utilisez mod_wsgi, vous pouvez recharger en vérifiant l'horodatage sur le seul script .wsgi qui charge votre application. D'autres serveurs WSGI ont des fonctions de rechargement importantes, comme Spawning. – joeforker

+0

* Je crois que les deux options sont essentiellement incompatibles * Ils sont, [en effet] (https://bitbucket.org/ianb/pastescript/src/510ff7d7627750eb0dbbc0d36fa63c72ffa6b303/paste/script/serve.py?at=default#cl-162). –

3

J'ai eu un problème similaire et contourné le problème. J'ai actuellement paster en cours d'exécution sur un hôte distant, mais je suis encore en développement, donc j'avais besoin d'un moyen de redémarrer paster, mais manuellement à la main était trop long, et le démon n'a pas fonctionné. Je devais donc toujours garder une fenêtre shell ouverte sur le serveur et lancer paster sans --daemon là-dedans. Une fois que j'ai fini mon travail pour ce jour, et j'ai fermé la coquille, le pasteur est mort, ce qui est mauvais.

J'ai contourné cela en exécutant paster non démonisé dans un "écran". Il suffit de taper "écran" dans votre shell de choix, vous dépendra généralement de votre linux être présenté avec un terminal virtuel, qui continuera à fonctionner même lorsque vous vous déconnectez de votre session à distance. Démarrez paster comme d'habitude dans votre nouvelle "fenêtre" (l'écran) avec --reload mais sans daemon, puis détachez la fenêtre, ainsi vous pouvez retourner à votre shell normal (detach = CTRL-A, puis appuyez sur D). Vous pouvez ré-entrer dans cet écran en tapant "screen -r". Si vous souhaitez le tuer, reconnectez-le (écran -r) et à l'intérieur de l'écran tapez CTRL-A, puis appuyez sur K.

Espérons que cela aide.