我们在redhat服务器的apache2下使用django(1.7.5)和mod_wsgi,并尝试使用看门狗监视文件 .
它使用 python manager.py runserver
命令在本地工作正常,而当我将其部署到产品环境中时,不会在wsgi模式下触发事件
# 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
1 回答
找到路由原因,默认的Observer(
inotify.InotifyObserver
)在旧的redhat服务器上使用旧的linux内核不起作用它在http://pythonhosted.org/watchdog/api.html#module-watchdog.observers中说明
因此我将其改为通用的