Existe-t-il un moyen pour mod_wsgi de recharger tous les modules (peut-être dans un répertoire particulier) sur chaque chargement? En travaillant sur le code, il est très ennuyeux de redémarrer Apache à chaque fois que quelque chose est changé. La seule option que j'ai trouvé jusqu'à maintenant est de mettre modname = reload(modname)
en dessous de chaque importation .. mais c'est aussi très ennuyeux car cela signifie que je vais devoir passer et les supprimer tous à une date ultérieure ..mod_wsgi modules de rechargement de force
Répondre
mod_wsgi documentation on code reloading est votre meilleur pari pour une réponse.
Le lien:
http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode
doit être souligné. Il faut également souligner que sur les systèmes UNIX, le mode daemon de mod_wsgi doit être utilisé et que vous devez implémenter le moniteur de code décrit dans la documentation. L'option de rechargement de processus ne fonctionnera pas pour le mode intégré de mod_wsgi sur les systèmes UNIX. Même si sur les systèmes Windows la seule option est le mode embarqué, il est possible de faire la même chose en provoquant un redémarrage interne d'Apache à partir du script de contrôle de code. Ceci est également décrit dans la documentation.
La solution suivante est destiné aux utilisateurs Linux uniquement, et a été testé pour fonctionner sous Ubuntu Server 12.04.1
Pour exécuter WSGI en mode démon, vous devez spécifier WSGIProcessGroup
et WSGIDaemonProcess
directives dans votre fichier de configuration Apache , par exemple
WSGIProcessGroup my_wsgi_process
WSGIDaemonProcess my_wsgi_process threads=15
Plus de détails sont disponibles dans http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives
Une prime ajoutée est la stabilité supplémentaire si vous utilisez plusieurs sites WSGI sous le sam e serveur, potentiellement avec des directives VirtualHost. Sans utiliser les processus démon, j'ai trouvé deux sites Django en conflit les uns avec les autres et en retournant 500 erreurs internes du serveur en alternance.
À ce stade, votre serveur est en fait la surveillance déjà votre site WSGI pour les changements, mais il regarde uniquement le fichier spécifié à l'aide WSGIScriptAlias
, comme
WSGIScriptAlias//var/www/my_django_site/my_django_site/wsgi.py
Cela signifie que vous pouvez forcer le processus démon WSGI recharger en changeant le script WSGI. Bien sûr, vous n'avez pas à modifier son contenu, mais plutôt
$ touch /var/www/my_django_site/my_django_site/wsgi.py
ferait l'affaire. En utilisant la méthode ci-dessus, vous pouvez recharger automatiquement un site WSGI dans un environnement de production sans redémarrer/recharger tout le serveur Apache ou en modifiant votre script WSGI pour effectuer une surveillance de modification de code non sécurisée pour la production. Ceci est particulièrement utile lorsque vous avez des scripts de déploiement automatisés et que vous ne voulez pas redémarrer le serveur Apache lors du déploiement.
Au cours du développement, vous pouvez utiliser un système de fichiers change Watcher pour appeler touch wsgi.py
chaque fois qu'un module sous vos modifications du site, par exemple, pywatch
Je sais qu'il est un vieux fil, mais cela pourrait aider quelqu'un.Pour tuer votre processus quand un fichier dans un répertoire est écrit, vous pouvez utiliser quelque chose comme ceci:
monitor.py
import os, sys, time, signal, threading, atexit
import inotify.adapters
def _monitor(path):
i = inotify.adapters.InotifyTree(path)
print "monitoring", path
while 1:
for event in i.event_gen():
if event is not None:
(header, type_names, watch_path, filename) = event
if 'IN_CLOSE_WRITE' in type_names:
prefix = 'monitor (pid=%d):' % os.getpid()
print "%s %s/%s changed," % (prefix, path, filename), 'restarting!'
os.kill(os.getpid(), signal.SIGKILL)
def start(path):
t = threading.Thread(target = _monitor, args = (path,))
t.setDaemon(True)
t.start()
print 'Started change monitor. (pid=%d)' % os.getpid()
Dans votre démarrage du serveur, appelez comme:
serveur .py
import monitor
monitor.start(<directory which contains your wsgi files>)
si votre fichier principal du serveur est dans le répertoire qui contient tous vos fichiers, vous pouvez aller comme:
monitor.start(os.path.dirname(__file__))
Ajout d'autres dossiers est laissé comme un exercice ...
Vous devez Pip installer inotify '
Cela a été cribbed du code ici: https://code.google.com/archive/p/modwsgi/wikis/ReloadingSourceCode.wiki#Restarting_Daemon_Processes
C'est un répondre à ma question en double ici: WSGI process reload modules
- 1. Modules de rechargement Moderl :: perlrun
- 2. En production, Apache + mod_wsgi ou Nginx + mod_wsgi?
- 3. Problème de rechargement UITableView
- 4. force script de téléchargement
- 5. nginx avec mod_wsgi
- 6. mod_wsgi/python problèmes sys.path.exend
- 7. soaplib avec mod_wsgi/cherrypy
- 8. personnalisation de modèle/rails de rechargement
- 9. mod_wsgi tampon de sortie de rendement au lieu de retour
- 10. Rechargement de Python et Qt-function
- 11. Rechargement un fichier de configuration sous jBoss
- 12. PHP: Rechargement l'image captcha de javascript
- 13. Récemment consulté DIV sans rechargement de page
- 14. Rechargement de UITableViewCell sur la sélection
- 15. Apache Django Mod_Wsgi - recharge automatique
- 16. Asp.net force force sur detailsview/formview
- 17. Exemples de modules de table
- 18. Rechargement en javascript
- 19. Rechargement CSS sur IE7
- 20. Ecraser force de App.config lors de l'installation
- 21. force de verrouillage de réveil Android Fermer
- 22. règle de réécriture simple pour un nginx + apache2 avec mod_wsgi
- 23. comportement bizarre avec deux instances de Trac sous Apache + mod_wsgi
- 24. Réutilisation de la connexion avec Curl, Apache et mod_wsgi
- 25. python importation de modules relatifs
- 26. Installation de modules Apache supplémentaires
- 27. De quels modules dépend mod_rewrite?
- 28. Programtically Rechargement un projet C#
- 29. Rechargement d'un JTree pendant l'exécution
- 30. Rechargement d'une image dans wpf
Je lisais que .. n'a pas été utile cependant :( – Ian
Ian, est-ce parce que vous êtes sur Windows ou en utilisant mod_wsgi en mode intégré? Parce que sinon cette page a du code pour le redémarrage automatique et cela fonctionne parfaitement. –
Non, c'est sur Linux. Le rechargement automatique ne s'applique qu'au script en cours d'accès, pas aux modules appelés par le script. – Ian