1

奇怪的问题。我有一个 Django 站点,我以两种方式运行:

  1. 通过 apache/wsgi on :80 正常
  2. 测试python manage.py runserver时开启:8000

通过 wsgi 一切正常,但是使用runserver,当我到达任何错误页面 ( debug = True) 时,页面加载一半,然后永远加载,不显示回溯。

关于加载“中途”的一些注意事项:

  • 对于相同的错误,它似乎加载到完全相同的点
  • 对于不同的错误,它将是不同的点(根据 Firebug 的不同部分的回溯和不同的文件大小)
  • 对于不同的浏览器,它将加载到不同的点(如果重新加载页面,则始终是相同的点)。
  • 一个例子:我现在有一个ValueError,它加载到回溯的第一步,在'local vars'处request加载。在 Firefox 中,它始终加载到SSH_CONNECTION,而在 Chrome 中加载到SHELL(在 Firefox 中加载正常)。
  • 服务器重新启动没有效果。

正常(非错误)页面加载得很好。控制台没有显示任何特殊内容,仅显示代码为 500 的请求。

4

2 回答 2

1

听起来pdb.set_trace()您的代码中有某个地方。我会猜测在__unicode__错误页面的呈现期间正在调用的方法或某些东西。这是基于来自开发服务器的输出被缓冲的概念。

另一种(很可能)的可能性是您在某处进行了无休止的递归调用(很可能在与上述set_trace情况相似的地方),但是递归功能花费的时间足够长,以至于您永远看不到RuntimeError: maximum recursion depth exceeded错误。

例如:

import time

def foo():
    time.sleep(.2)
    bar()

def bar():
    foo()

bar()

否则很难让 Python 程序挂起,除非你是故意这样做的。

于 2013-06-09T00:35:32.383 回答
1

https://code.djangoproject.com/ticket/15132

解决方法是安装“django-extensions”和 werkezeug,然后使用manage.py runserver_plus. 这个增强的开发服务器默认显示回溯以及其他细节。

于 2015-08-18T21:06:38.137 回答