Je cours une application Django sur Apache + Mod_python. Lorsque je modifie certaines modifications au code, ils ont parfois un effet immédiatement, d'autres fois qu'ils ne le font pas, jusqu'à ce que je redémarre Apache. Cependant, je ne veux pas vraiment faire cela puisqu'il s'agit d'un serveur de production en exécutant d'autres choses aussi. Y a-t-il une autre façon de forcer cela? P>
Juste pour le faire clairement, car je vois que certaines personnes se trompent, je parle d'un environnement em>. Pour le développement, j'utilise le serveur de développement de Django, bien sûr. P>
4 Réponses :
Utilisez un serveur de test inclus dans Django. (comme J'ai entendu dire qu'il existe une astuce qui définit les instances max d'Apache à 1 afin que chaque changement de code soit reflété immédiatement - mais parce que vous avez dit que vous exécutez d'autres services, cela peut ne pas être votre cas. p> ./ manage.py runserver 0.0.0.0:8080 code>) Cela fera la plupart des choses dont vous auriez besoin pendant le développement. Le seul inconvénient est qu'il ne peut pas gérer des demandes simultanées avec multi-filetage. P>
Thats "MaxreQuestSperchild 1" est défini dans httpd.conf comme indiqué par ZDMytriv, mais ne le fais pas pour la manipulation du site.
Si possible, vous devez passer à mod_wsgi. C'est maintenant le Way recommandée pour servir Django de toute façon, et c'est beaucoup plus efficace en termes de ressources de mémoire et de serveur. p>
dans mod_wsgi, chaque site dispose d'un fichier .wsgi code> associé à celui-ci. Pour redémarrer un site, juste touchez code> le fichier correspondant, et seul ce code sera rechargé. P>
Je suis un peu effrayé de ces choses XXGI après tout le problème que j'avais avec FastCGI (sûr, c'était Lightpd, mais toujours): Stackoverflow.com/questions/393637/... . Je ne savais pas que WSGI est la façon recommandée de déployer Django maintenant. Il était mod_python, non? Quoi qu'il en soit, je vais y regarder. Merci!
s / the the choses / ces choses / :)
Comme indiqué ailleurs, vous devez utiliser MOD_WSGI Daemon Mode pour obtenir une fonctionnalité dans laquelle un rechargement se produira lorsque le fichier de script WSGI est touché.
@ibz: mod_wsgi est si différent de FastCGI qu'ils ne sont pas comparables de quelque manière que ce soit.
Notez que (comme Graham Dumpleton mentionne ci-dessous) le touch-.wsgi-file-to-redémarrage ne fonctionne que dans le mode Daemon, non embarqué.
Vous pouvez réduire le nombre de connexions à 1 par réglage "MaxreQuestSperchild 1" dans votre fichier httpd.conf. Mais ne le faites que sur le serveur de test, pas la production. P>
ou p>
Si vous ne voulez pas tuer les connexions existantes et que vous redémarrez toujours Apache, vous pouvez le redémarrer "gracieusement" en effectuant "Apache2CTL gracieusement" - toutes les connexions existantes seront autorisées à compléter. P>
"Apache2ctl gracieusement" sonne comme une chose soignée. Va certainement regarder cela, même si ce n'est pas exactement ce que je cherchais. Merci pour le conseil!
Comme d'autres ont suggéré, utilisez plutôt Mod_WSGI. Pour obtenir la possibilité de rechargement automatique, en appuyant sur le fichier de script WSGI ou via un moniteur qui recherche les modifications de code, vous devez utiliser le mode Daemon sur UNIX. Une légère main peut être utilisée pour réussir les fenêtres lorsque vous utilisez le mode embarqué. Tous les détails peuvent être trouvés dans: P>