我在 Apache + mod_python 上运行 Django 应用程序。当我对代码进行一些更改时,有时它们会立即生效,有时它们不会,直到我重新启动 Apache。但是我真的不想这样做,因为它也是一个运行其他东西的生产服务器。还有其他方法可以强制吗?
只是为了说清楚,因为我看到有些人弄错了,所以我说的是生产环境。当然,对于开发,我使用的是 Django 的开发服务器。
我在 Apache + mod_python 上运行 Django 应用程序。当我对代码进行一些更改时,有时它们会立即生效,有时它们不会,直到我重新启动 Apache。但是我真的不想这样做,因为它也是一个运行其他东西的生产服务器。还有其他方法可以强制吗?
只是为了说清楚,因为我看到有些人弄错了,所以我说的是生产环境。当然,对于开发,我使用的是 Django 的开发服务器。
如果可能,您应该切换到 mod_wsgi。无论如何,现在这是为 Django 提供服务的推荐方式,并且在内存和服务器资源方面效率更高。
在 mod_wsgi 中,每个站点都有一个.wsgi
与之关联的文件。要重新启动站点,只需touch
相关文件,并且只会重新加载该代码。
正如其他人所建议的那样,请改用 mod_wsgi 。要获得自动重新加载的能力,通过触摸 WSGI 脚本文件,或通过监视器查找代码更改,您必须在 UNIX 上使用守护程序模式。使用嵌入式模式时,可以在 Windows 上使用轻微的手来实现相同的效果。所有详细信息都可以在以下位置找到:
您可以通过在 httpd.conf 文件中设置“MaxRequestsPerChild 1”将连接数减少到 1。但是只在测试服务器上做,而不是在生产服务器上做。
或者
如果您不想终止现有连接并仍然重新启动 apache,您可以通过执行“apache2ctl gracefully”“优雅地”重新启动它 - 所有现有连接都将被允许完成。
使用 Django 中包含的测试服务器。(like ./manage.py runserver 0.0.0.0:8080
) 它会做你在开发过程中需要的大部分事情。唯一的缺点是它无法处理多线程的同时请求。
我听说有一个技巧,将 Apache 的最大实例数设置为 1,以便立即反映每个代码更改——但是因为您说您正在运行其他服务,所以这可能不是您的情况。