2009-07-03 64 views
8

我在Apache + mod_python上运行Django应用程序。当我对代码进行一些更改时,有时它们会立即生效,有时候它们不会,直到我重新启动Apache。但是我并不想这么做,因为它也是一个运行其他东西的生产服务器。有没有其他的方式来强制呢?重启在Apache +上运行的Django应用程序mod_python

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

回答

15

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

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

+0

在我遇到了FastCGI遇到的所有麻烦(当然,它是Lighttpd,但仍然)之后,我有点害怕这个XXgi事情:http://stackoverflow.com/questions/393637/django-fastcgi-randomly-raising- operationalerror。不知道wsgi是现在部署Django的推荐方式。它曾经是mod_python,对吧?无论如何,我会研究它。谢谢! – ibz 2009-07-03 10:12:47

+0

s /这些东西/这些东西/ :) – ibz 2009-07-03 10:13:29

-1

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

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

+0

那“MaxRequestsPerChild 1”在httpd.conf中设置由zdmytriv所讲述的,但对于现场处理任何负载不这样做。 – agiliq 2009-07-03 09:22:33

0

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

如果你不想杀死现有的连接仍然重新启动Apache你可以通过“正常apache2ctl”执行重新启动“正常” - 所有现有的连接将被允许完成。

4

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

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

相关问题