Django manage.py runserver 无法响应

2 投票
1 回答
2251 浏览
提问于 2025-04-18 16:06

我在Mac OS X上运行一个vagrant虚拟机,这个虚拟机里装的是Ubuntu 12.04,使用的是Python 2.7和Django 1.4.5。当我启动manage.py的时候,我是这样调用它的:

./manage.py runserver 0.0.0.0:8000

然后如果我在虚拟机里访问 http://127.0.0.1:8000,我试过的文本浏览器都显示说HTTP请求已经发送,但一直在等响应,直到请求超时。根本没有任何响应。

我可以这样用telnet连接到这个端口:

telnet 127.0.0.1 8000

然后随便输入一些乱七八糟的东西,manage.py会报告如下信息:

127.0.0.1 - - [05/Aug/2014 17:06:26] code 400, message Bad request syntax ('asdfasdfadsfasd') 127.0.0.1 - - [05/Aug/2014 17:06:26] "asdfasdfadsfasd" 400 -

这说明manage.py在那个端口上是有在监听的。但是标准的HTTP请求却没有从manage.py那里得到任何响应,无论是在控制台还是在浏览器里。

我尝试过使用不同的端口,但没有任何效果。有没有人有什么想法?

更新

一些额外的curl输出。

执行 'curl -v http://127.0.0.1:8000' 返回:

* 正在连接到127.0.0.1的8000端口 (#0)
* 尝试连接127.0.0.1... 已连接

GET / HTTP/1.1
User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
Host: 127.0.0.1:8000
Accept: /
'

执行 'curl -v http://somefakedomain' 的结果是:

* getaddrinfo(3) 失败,无法解析 somefakedomain:80
* 无法解析主机 'somefakedomain'
* 关闭连接 #0
curl: (6) 无法解析主机 somefakedomain'

1 个回答

2

好的,接下来我再说一遍我之前的内容。

在应用程序启动时,有一个调用Django服务的操作失败了。没有抛出错误,而是被Sentry吸收了。那些已经在本地机器上使用虚拟机的人们找到了绕过这个问题的方法。

通过导入ipdb并调用它的set_trace()函数,我找到了问题所在。从控制台上,我一步步检查应用程序,测试可能出问题的变量和返回值,直到它不再继续运行。这样我就缩小了范围,找到了那个表现不正常的服务和它没有抛出的错误。

现在代码已经更新,添加了合适的try/catch块,错误处理得也很妥当。

所以总结一下:问题不是出在虚拟机上,而是代码本身有问题。

撰写回答