我在Webfaction上托管的生产服务器上的Django应用程序工作正常,直到我在将更改推送到settings.py文件后尝试重新启动它。我跑了
apache2/bin/restart
照常。然后我尝试在浏览器上访问我的应用程序,然后我得到了504网关超时。我查看了mod_wsgi日志并看到了这个:
[Thu Nov 03 23:46:53.605625 2016] [wsgi:error] [pid 8027:tid 139641332168448]
[client 127.0.0.1:34570] Timeout when reading response headers from daemon
process 'myapp' : /home/<me>/webapps/<myapp>/<ProjectName>/<myapp>/wsgi.py
这是什么意思,我该如何解决?我在settings.py文件中唯一更改的是移动一些变量名称。我仍然可以成功地与应用程序进行交互
python2.7 manage.py shell
但我不能在网上找到它,也不能使用API。
编辑:这是我的wsgi.py文件:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<myapp>.settings")
application = get_wsgi_application()
已知Python C扩展模块(如numpy)在mod_wsgi下使用时会导致超时。在https://serverfault.com/a/514251/109598上有一个明确的问题解释(直接来自mod_wsgi的作者)
如果这听起来可能是您的问题的原因,那么解决方案可能很简单 - 将以下内容添加到您的httpd.conf:
WSGIApplicationGroup %{GLOBAL}
进行更改后,请务必重新启动Apache实例。
尝试在Timeout
中增加httpd.conf
指令,在Apache 2.4中默认为60秒。例如:
TimeOut 600
以下是我如何找到问题的根本原因。
python manage.py showmigrations
我的应用程序无法访问数据库服务器,因此最终会超时。运行manage.py我可以看到在控制台上看到错误消息。