2011-06-08 48 views
5

我正在开发一个成熟的Django项目,并注意到一些不寻常的事情。当我编辑urls.py时 - 无论是在项目级别还是以下 - Django都会忽略我的更改。对Django忽略的/project/urls.py的更改

调试已打开,所以当我得到404 Django时,它会打印所有尝试的URL模式。从这里我看到的URL模式,然后我做了我的更改

同样,这是不管我编辑/project/urls.py还是/project/sub/urls.py。可以肯定的是,正确包含了子目录urls.py。

我专注于项目级urls.py,以防万一。

我可以对urls.py做一个小小的更新或删除它的所有内容。 404调试信息显示旧的url模式。

这就好像Django正在查看这些urls.py文件的缓存版本。我应该如何继续?

+4

你如何运行你的django服务器?你有没有尝试重新启动实例? – 2011-06-08 16:10:52

+0

@亚当我尝试过,清除了饼干等。@Shawn伟大的提醒,我会尝试。 – ram1 2011-06-08 16:14:31

+0

Django的内置服务器(通过'runserver'命令运行)自动检查代码的更新。使用任何其他服务器(包括Django的'testserver'),您需要显式重新加载源代码。如果您告诉我们您是如何为您的申请提供服务的,就像Shawn Chin所说的那样,我们可以就如何实施提供建议! – adamnfish 2011-06-08 16:15:47

回答

10

通过deafult,Django的开发服务器(通过runserver管理命令访问)将关注你的代码,并随时随地重新加载。如果您使用任何其他服务器(包括Django的testserver命令),这几乎肯定不是这种情况。

通常,服务器会在启动时加载应用程序的源代码。它需要重新加载以获取代码的最新副本。如果您使用的是mod_wsgi(可能是Django应用程序中最常用的生产服务器)的Apache,则在您的源代码树中的某处会有一个wsgi应用程序文件。按照惯例,这些扩展名有.wsgi,但它可以被命名为任何东西。这个文件是Apache用来加载你的源文件的,而mod_wsgi(守护进程模式)的一个有用的特性是触及(改变修改日期)这个文件足以强制服务器清理源代码。如果您的应用程序有一个可以编辑的wsgi文件,那么这样做并重新上传代码应该足够了。该文件可能包含行application = django.core.handlers.wsgi.WSGIHandler()或类似的东西 - 这可能会帮助你

如果你没有访问权限或者你找不到任何这样的文件,你将需要更新的源服务器的管理员,并要求他们更新并重新加载源代码。在没有更多信息的情况下向您提供更多建议会非常棘手 - 也许您可以向服务器管理员咨询更多信息,以便我们能够提供帮助?

== ==更新

我检查链路上的响应头您提供的,它看起来像您使用nginx的服务网站。这可能只是另一台服务器前面的负载均衡器,所以我仍然建议您从系统管理员处获取更多信息。

+1

谢谢!说得通。很明显,我们只是使用Nginx来提供静态内容,所以我运行了'apache2ctl restart',并且urls.py更改正在运行。 – ram1 2011-06-08 19:48:52

+0

优秀!请记住,重新启动apache会影响它所服务的每个网站,这可能会产生意想不到的副作用。如果您发现wsgi文件(如果您正在努力追踪该文件,将会在此站点的apache配置中引用该文件),然后触摸它将优雅地重新加载此应用程序的源代码。 – adamnfish 2011-06-08 21:46:37

+2

对于Apache部署,最好使用'$ sudo apache2ctl graceful'重新加载最新配置,而不会干扰当前访问者。 – 2011-06-09 00:48:50