【问题标题】:uWSGI / Flask: "no python application found, check your startup logs for errors"uWSGI / Flask:“未找到 python 应用程序,请检查您的启动日志是否有错误”
【发布时间】: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 你解决了吗?

标签: nginx flask uwsgi


【解决方案1】:

这个问题也会发生,因为要使用的 uWSGI python 插件没有在 .init 文件中声明。假设您安装了 python3.6 uWSGI python 插件,在 .ini 文件中添加以下内容 plugins = python36 现在,您将看到其他问题,否则 uWSGI 将能够加载应用程序 0。此外,请确保您处于激活的虚拟环境中以测试该应用程序是否由 uWSGI 提供服务。

【讨论】:

    【解决方案2】:

    好的,抱歉,来晚了。我也有这样的错误,这就是我解决我的方法

    [uwsgi]
    chdir = /home/goodnews/myproject
    home = /home/goodnews/myproject/venv
    module = wsgi:app
    master = true
    processes = 5
    
    #socket = myproject.sock
    socket = :5000
    protocol = http
    chmod-socket = 666
    vaccum = true
    die-on-term = true
    

    在我的情况下,我正在使用本地虚拟机(运行 Ubuntu 终端),这就是

    socket = :5000
    

    我正在测试一个使用 ssh 连接到 Ubuntu 服务器的 web 应用程序。 希望这可以帮助某人

    【讨论】:

      【解决方案3】:

      @John 在这一点上基本上是正确的,但为了清楚起见,我想详细说明一下。

      我在一个具有基本相同设置的项目中遇到了同样的问题,解决方法是将我的 uwsgi.py 模块移动到我的烧瓶应用程序包中,就像这样

      myprojectname/
          __init__.py
          uwsgi.py
      

      然后将 uwsgi.ini 中的模块定义更改为 module=myprojectname.uwsgi:application,如下所示:

      [uwsgi]
       module=myprojectname.uwsgi:application
       master=true
       processes=2
      
       socket=myprojectname.sock
       chmod-socket=660
       logto=/var/log/uwsgi/uwsgi.log
       die-on-term=true
      

      还要确保将可调用对象指定为应用程序,就像原始发布的代码示例中的情况一样。 uWSGI 默认会寻找这个名为 object 的应用程序,我真的很难让它工作命名为其他任何东西,比如 app。

      【讨论】:

      • 项目名如何获取?
      • @ZakiAziz myprojectname 在这种情况下是目录
      【解决方案4】:

      可能是您的 uWSGI 配置 (mysite.ini) 错误:

      改变:

      module = wsgi:app
      

      到:

      module = projectName.wsgi:application
      

      【讨论】:

      • 项目名称如何获取?
      猜你喜欢
      • 1970-01-01
      • 2012-12-26
      • 2013-08-11
      • 2014-08-09
      • 1970-01-01
      • 2020-01-03
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多