We use django (1.7.5) with mod_wsgi under apache2 in redhat server, and try to use watchdog to monitor the files.
It works fine locally using python manager.py runserver command, while the event is not triggerred in wsgi mode when I deploy it into product environment
# wsgi.py
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
LOGGER.debug("Starting to watch for config file changes.")
fw = FileWatcher()
# filewatcher
path = settings.PROJECT_ROOT
filename = 'config.json'
class ConfigHandler(FileSystemEventHandler):
def on_modified(self, event):
if not event.is_directory and event.src_path.endswith(filename):
LOGGER.debug("The config has changed!, Reloading")
class FileWatcher(object):
_instance = None
_watching = False
def __new__(cls, *args, **kwargs):
if not cls._instance:
LOGGER.debug("Creating new FileWatcher")
cls._instance = super(FileWatcher, cls).__new__(cls, *args, **kwargs)
cls.start_watching()
return cls._instance
@classmethod
def start_watching(cls):
if not cls._watching:
LOGGER.debug("Starting to monitor the file: %s",
os.path.join(path, filename))
event_handler = ConfigHandler()
observer = Observer()
observer.schedule(event_handler, path=path, recursive=False)
observer.start()
cls._watching = True