django - Django 1.7 在 mod-wsgi 上的代码更改监控出现故障

标签 django apache mod-wsgi

这是我在所有在 mod_wsgi 中运行 Django 1.7 的网站上遇到的问题。问题的关键在于,如果在本地开发时,我在代码库中引入了一个 fatal error ,然后对其进行了更正,代码监控脚本不会检测到更正。

我用 Graham Dumpleton's monitor.py script在本地开发时检测代码库的更改(我使用 apache 而不是 Django 开发服务器)。

它总是在 Django <= 1.6 中工作,但在 Django 1.7 中我收到以下错误:

File "/home/me/.virtualenvs/myvirtualenv/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
    django.setup()
File "/home/me/virtualenvs/myvirtualenv/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
File "/home/me/.virtualenvs/myvirtualenv/lib/python2.7/site-packages/django/apps/registry.py", line 78, in populate
    raise RuntimeError("populate() isn't reentrant")
RuntimeError: populate() isn't reentrant

令人恼火的是,如果我纠正了错误,monitor.py 不会检测到更改,所以我必须重新启动 apache,或者触摸另一个已经加载的文件(例如设置文件)。

我认为这是因为“重新加载代码只监视导入的文件(又名 sys.modules)”(source)。所以因为错误的文件没有成功导入,monitor.py 不知道重启进程。

最佳答案

我不确定您的部署过程和生产操作系统是什么,但在 Linux/Ubuntu 世界中有一个名为 pyclean 的操作系统命令。在我的 Django/Python 部署脚本期间(通常通过结构),我发出命令“pyclean”。在项目根目录中。此脚本递归删除从当前文件夹开始的所有 .pyc 文件。我希望这有帮助。

关于django - Django 1.7 在 mod-wsgi 上的代码更改监控出现故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27232732/

相关文章:

Apache .htaccess - 根据环境或主机名有条件地应用基本身份验证

apache - 尽管有适当的许可,跨源图像加载仍被拒绝

python - Apache mod_wsgi 崩溃

python - 带有 wsgi 的 Django 偶尔失败并显示 "Premature end of script headers:"

django - 在 ubuntu apache2 上部署 django 应用程序

python - 在同一个 apache 服务器上运行 django 和 flask

python - Django Rest 框架和 JSONField

python - Django 可以用于非网络应用程序吗?

python - 南django.db.utils.IntegrityError : django_content_type. name may not be NULL while running unit tests

django - 在 Django 模板中显示 undefined variable 错误?