重新启动在Apache + mod_python上运行的Django应用程序

时间:2009-07-03 07:23:56

标签: python django mod-python

我在Apache + mod_python上运行Django应用程序。当我对代码进行一些更改时,有时它们会立即生效,有时则不会生效,直到我重新启动Apache。但是我真的不想那样做,因为它也是一个运行其他东西的生产服务器。还有其他方法可以强迫它吗?

为了说清楚,因为我看到有些人弄错了,我说的是生产环境。对于开发,我当然使用Django的开发服务器。

4 个答案:

答案 0 :(得分:15)

如果可能,您应该切换到mod_wsgi。现在无论如何都是recommended way为Django提供服务,并且在内存和服务器资源方面效率更高。

在mod_wsgi中,每个站点都有一个与之关联的.wsgi文件。要重新启动网站,只需touch相关文件,只会重新加载该代码。

答案 1 :(得分:4)

正如其他人所建议的那样,请改用mod_wsgi。要通过触摸WSGI脚本文件或通过查找代码更改的监视器来获得自动重新加载的能力,您必须在UNIX上使用守护程序模式。使用嵌入式模式时,可以使用轻微的手在Windows上实现相同的功能。所有细节都可以在以下网址找到:

http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

答案 2 :(得分:0)

您可以通过在httpd.conf文件中设置“MaxRequestsPerChild 1”来减少连接数为1。但是只在测试服务器上进行,而不是生产。

如果你不想杀死现有的连接并仍然重启apache,你可以通过“优雅地”执行“apache2ctl”来“优雅地”重启它 - 所有现有的连接都将被允许完成。

答案 3 :(得分:-1)

使用Django中包含的测试服务器。 (如./manage.py runserver 0.0.0.0:8080)它将完成开发过程中您需要的大部分工作。唯一的缺点是它无法处理多线程的同时请求。

我听说有一个技巧可以将Apache的max实例设置为1,以便立即反映每个代码更改 - 但因为您说您正在运行其他服务,所以这可能不是您的情况。