繁体   English   中英

如何诊断 Python Flask 应用程序中仅在应用程序与 uWSGI 一起运行时出现的问题?

[英]How do I diagnose problems in a Python Flask application that only occur when app is run with uWSGI?

我编写了一个 Web 应用程序来使用运行在 uWSGI 服务器上的 Python 应用程序来控制 LED 灯条。 前端和后端组件似乎工作正常,但是当我使用 uWSGI 运行它而不是使用 Flask 开发网络服务器时,程序会出现问题,我不确定如何诊断它们。 我的代码中 wsgi 似乎有问题的两部分是 python 日志模块(因此我很难诊断问题)和 LED 本身的操作。 我在下面列出了我的配置文件,很高兴提供任何其他可能有用的信息。

尽管开发中涉及的所有文件都已包含在此 GitHub 存储库中,但代码并未处于可以轻松安装在另一个系统上的状态 这包括 Python 后端代码、HTML + CSS 和剩余的配置文件。 预期平台是在 Raspberry Pi 3A+ 型号上运行的 Raspbian Linux。

/etc/lights/lights.ini (uWSGI)

[uwsgi]
module = lights:app

chdir = /var/lights/
logto = /var/log/lights/lights.log
master = true
processes = 5
enable-threads = true
threads = 10

socket = lights.sock
chmod-socket = 666
vacuum = true

die-on-term = true

plugin = /usr/lib/uwsgi/plugins/python3_plugin.so

/etc/nginx/sites-enabled/lights (nginx)

server {
    listen 80;
    server_name 192.168.1.79;
    
    access_log /var/log/nginx/lights_access.log;
    error_log /var/log/nginx/lights_error.log;

    root /var/lights/;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:///var/lights/lights.sock;
    }
}
def main():
    logging.basicConfig(level=logging.INFO, format=logFormat)
    application = app
    app.run()

if __name__ == "__main__":
    main()

日志问题似乎在这里。 仅当程序作为主要 Python 脚本执行时才会设置日志记录,但不会为 Python 导入设置日志记录。 UWSGI 使用 Python C API 调用此函数,因此永远不会执行main方法。

这也解释了为什么它适用于 Flask 开发服务器,因为您作为 Python 脚本执行而不是导入模块。

要修复它,您可以将日志记录设置移动到主模块级别,您应该很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM