Apache Django Mod_Wsgi - auto reload

后端 未结 6 610
执念已碎
执念已碎 2020-12-29 15:54

I am trying to auto reload my django app which uses apache + mod_wsgi on my local windows machine.

I\'d like to know where do I add this code that\'s referenced in

相关标签:
6条回答
  • 2020-12-29 16:38

    In your Virtual Host config file add this:

    WSGIScriptReloading On
    

    And reload Apache

    systemctl reload apache2
    

    Enjoy!

    Reference https://flask.palletsprojects.com/en/1.1.x/deploying/mod_wsgi/

    0 讨论(0)
  • 2020-12-29 16:45

    I test this with Bitnami DjangoStack http://bitnami.org/stack/djangostack and Windows XP installed on D:\BitNami DjangoStack and C:\Documents and Settings\tsurahman\BitNami DjangoStack projects\myproject as project directory (default install)

    as in http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Restarting_Apache_Processes, I added

    MaxRequestsPerChild 1
    

    in file D:\BitNami DjangoStack\apps\django\conf\django.conf see comment by Graham Dumpleton

    then I created a file monitor.py in my project directory with content as in http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Monitoring_For_Code_Changes and replace the _restart method with http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Restarting_Windows_Apache, here is the part of the script

    ....
    
    _running = False
    _queue = Queue.Queue()
    _lock = threading.Lock()
    
    def _restart(path):
        _queue.put(True)
        prefix = 'monitor (pid=%d):' % os.getpid()
        print >> sys.stderr, '%s Change detected to \'%s\'.' % (prefix, path)
        print >> sys.stderr, '%s Triggering Apache restart.' % prefix
        import ctypes
        ctypes.windll.libhttpd.ap_signal_parent(1)
    
    def _modified(path):
        try:
    
    ....
    

    and in file D:\BitNami DjangoStack\apps\django\scripts\django.wsgi,

    ....
    
    import django.core.handlers.wsgi
    
    import monitor
    monitor.start(interval=1.0)
    monitor.track(os.path.join(os.path.dirname(__file__), 'site.cf'))
    
    application = django.core.handlers.wsgi.WSGIHandler()
    

    and then restart the Apache server

    0 讨论(0)
  • 2020-12-29 16:49

    You replace the restart function that is mentioned in the block of code above in the same article.

    0 讨论(0)
  • 2020-12-29 16:50

    Read:

    http://blog.dscpl.com.au/2008/12/using-modwsgi-when-developing-django.html

    It tells you exactly where to place the file when using Django. You just need to make the code change that everyone is pointing out to you in the source code reloading documentation section related to Windows. Also read:

    http://blog.dscpl.com.au/2009/02/source-code-reloading-with-modwsgi-on.html

    which explains the variations on the first related to Windows.

    0 讨论(0)
  • 2020-12-29 16:54

    You replace the restart function in the following block of code you find on the page:

    Monitoring For Code Changes
    
    The use of signals to restart a daemon process could also be employed in a mechanism which automatically detects changes to any Python modules or dependent files. This could be achieved by creating a thread at startup which periodically looks to see if file timestamps have changed and trigger a restart if they have.
    
    Example code for such an automatic restart mechanism which is compatible with how mod_wsgi works is shown below.
    
    import os
    import sys
    import time
    import signal
    import threading
    import atexit
    import Queue
    
    _interval = 1.0
    _times = {}
    _files = []
    
    _running = False
    _queue = Queue.Queue()
    _lock = threading.Lock()
    
    def _restart(path):
        _queue.put(True)
        prefix = 'monitor (pid=%d):' % os.getpid()
        print >> sys.stderr, '%s Change detected to \'%s\'.' % (prefix, path)
        print >> sys.stderr, '%s Triggering process restart.' % prefix
        os.kill(os.getpid(), signal.SIGINT)
    
    0 讨论(0)
  • 2020-12-29 16:58

    I use this code on my server

    touch site.wsgi
    

    and it work. After reload page in browser I get page with changes. May be it ugly - but simple and no necessary restart apache.

    0 讨论(0)
提交回复
热议问题