uWSGI / Flask:“未找到 python 应用程序,请检查您的启动日志是否有错误”

use*_*096 12 nginx flask uwsgi

我有一个使用 NGINX + uWSGI + Flask 运行的网站。

该网站大部分时间都运行良好,但时不时地会进入一种状态,即 nginx 返回的页面仅显示“内部服务器错误”。如果我在执行此操作时查看 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 ---
Run Code Online (Sandbox Code Playgroud)

它可以长时间处于这种状态,但如果我做了一些看似无关的事情,比如对烧瓶应用程序进行任意更改,那么一切都会重新开始工作。然后它将继续工作,直到一段时间后它再次开始给出“内部服务器错误”,而不会进行任何代码更改。

我试过直接运行 uWSGI 应用程序,它运行没有任何错误。

我已经尝试在我的 Flask 应用程序上安装 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
Run Code Online (Sandbox Code Playgroud)

wsgi.py

from tunnelling.python.flask_app import app as application

if __name__ == "__main__":
    application.run()
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

系统文件:

[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
Run Code Online (Sandbox Code Playgroud)

小智 6

也许您的 uWSGI 配置 (mysite.ini) 错误:

改变:

module = wsgi:app
Run Code Online (Sandbox Code Playgroud)

到:

module = projectName.wsgi:application
Run Code Online (Sandbox Code Playgroud)

  • 你如何获得项目名称? (4认同)