![]() |
1
2
可以通过不在Live服务器上编辑代码来解决此问题。说真的,没有理由。使用版本控制在本地进行开发,如果必须,则从实时签出运行服务器,并使用签出最新版本并重新启动apache的post commit钩子。 |
![]() |
2
17
在后台程序模式下运行进程将没有帮助。下面是发生的事情: mod_wsgi正在生成多个相同的进程来处理django站点的传入请求。这些进程中的每一个都是自己的Python解释器,可以处理传入的Web请求。这些进程是持久的(它们不会针对每个请求被调出或分解),因此一个进程可以一个接一个地处理数千个请求。mod_wsgi能够同时处理多个web请求,因为有多个进程。 每当执行“导入模块”时,每个进程的python解释器都会加载模块(自定义python文件)。在django的上下文中,当由于web请求需要一个新的view.py时,就会发生这种情况。加载模块后,它将驻留在内存中,因此对文件所做的任何更改都不会反映在该进程中。随着更多的web请求进入,进程的python解释器将只使用已经加载到内存中的模块版本。您看到刷新之间的不一致性,因为您所做的每个Web请求都可以由不同的进程来处理。有些进程可能在代码的早期版本中加载了python模块,而其他进程可能在稍后加载(因为这些进程没有收到web请求)。 简单的解决方案:只要修改代码,就重新启动apache进程。大多数情况下,只要从shell“/etc/init.d/apache2 restart”以根用户身份运行就可以了。我相信一个简单的重新加载也能工作,它更快,“/etc/init.d/apache2 reload” 守护进程解决方案:如果您在守护进程模式下使用mod_wsgi,那么您只需触摸(unix命令)或修改您的wsgi脚本文件。为了澄清scrompt.com的帖子,修改python源代码不会导致mod_wsgi重新加载代码。只有在修改了wsgi脚本文件时才会重新加载。 最后一点要注意的是:我只谈到wsgi是为了简单起见而使用进程的。wsgi实际上在每个进程中使用线程池。我不觉得这个细节与这个答案相关,但你可以通过阅读了解更多。 mod_wsgi . |
![]() |
3
5
因为您在嵌入式模式下使用mod_wsgi,所以不会自动看到您的更改。您偶尔会看到它们,因为apache有时会启动新的处理程序实例,这些实例会捕获更新。 可以通过使用守护进程模式来解决此问题,如所描述的 here . 具体来说,您需要将以下指令添加到您的apache配置中:
|
![]() |
4
5
阅读mod_wsgi文档,而不是依赖django站点上包含的mod_wsgi宿主的最小信息。部分内容如下: http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode 这将告诉您如何在MODYWSGI中重新加载源代码,包括一个监视器,可以用来实现Django RunServer的相同类型的源代码重载。还可以看看哪些讨论如何将其应用于django。 http://blog.dscpl.com.au/2008/12/using-modwsgi-when-developing-django.html http://blog.dscpl.com.au/2009/02/source-code-reloading-with-modwsgi-on.html |
![]() |
Siva Gnanam · apache创建多个进程 7 年前 |
![]() |
Biboozz · Apache+Django+WSGI:页面不工作 7 年前 |
![]() |
augray · 如何从mod_wsgi正常关闭应用程序 8 年前 |
![]() |
NosPix · wsgi中写的行的含义是什么。形态 8 年前 |