【发布时间】:2018-10-22 15:47:23
【问题描述】:
我有一个使用 NGINX + uWSGI + Flask 运行的网站。
网站大部分时间都运行良好,但时不时会进入 nginx 返回的页面仅显示“Internal Server Error”的状态。如果我在执行此操作时查看 uWSGI 日志,我会看到以下内容:
[pid: 1580|app: -1|req: -1/37] 69.162.124.228 () {46 vars in 716 bytes} [Sat May 12 10:25:13 2018] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0)
--- no python application found, check your startup logs for errors ---
它可能会处于这种状态很长时间,但如果我做一些看似无关的事情,比如对烧瓶应用程序进行任意更改,那么一切都会重新开始工作。然后它将继续工作,直到一段时间后它再次开始给出“内部服务器错误”,而不进行任何代码更改。
我试过直接运行uWSGI应用,运行没有任何错误。
我尝试在我的烧瓶应用上安装 Sentry 以捕获任何错误,但发生这种情况时没有任何显示。
如何诊断?
我还可以查看哪些其他日志文件?
可能是什么原因造成的?
我已经做了一个多星期了,几乎通读了所有与 SO 相关的问题。 如果我无法弄清楚发生了什么,我已经没有想法了,并且几乎放弃了这个项目。 任何帮助将不胜感激。
这是我的文件:
uWSGI 配置 (mysite.ini)
[uwsgi]
module = wsgi:app
master = true
processes = 5
socket = mysite.sock
chmod-socket = 660
vacuum = true
die-on-term = true
logto = /var/log/uwsgi/%n.log
wsgi.py
from tunnelling.python.flask_app import app as application
if __name__ == "__main__":
application.run()
nginx:
server {
listen 80;
server_name www.mysite.com;
server_name mysite.com;
location / {
include uwsgi_params;
uwsgi_pass unix:/home/dimraft/mysite/mysite.sock;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
}
系统文件:
[Unit]
Description=uWSGI instance to serve mysite
After=network.target
[Service]
User=dimraft
Group=www-data
WorkingDirectory=/home/dimraft/mysite
Environment="PATH=/home/dimraft/mysite/mysiteenv/bin"
ExecStart=/home/dimraft/mysite/mysiteenv/bin/uwsgi --ini mysite.ini
[Install]
WantedBy=multi-user.target
【问题讨论】:
-
500 erro 表示您的应用程序级别存在问题,例如未处理的异常和儿子。与 uWSGI 无关。
-
我的问题仍然存在。如果在运行独立的烧瓶或 uwsgi 时无法重现它,我该如何诊断?
-
我不熟悉flask,但作为一般规则,在您的代码级别,您可以在关键点添加打印语句并尝试在调试模式下运行时重现错误。
-
你需要在uwsgi日志中找到Traceback(最近一次调用最后一次):看看是什么原因造成的。
-
@user1592096 你解决了吗?