• uWSGI, send_file and Python 3.5


    当你的Flask项目通过Nginx+uWSGI成功部署的时候,当你很高兴你Flask里面的接口成功跑通的时候,你会发现真高兴!好牛逼!

    然后当你写了其他几个接口的时候,在启动uWSGI服务的时候,死活报错,而且你从网上还找不到相关的方法时,找到能用的方法都试了,都不行,你会发现卧槽,真烦!

    我就是如同做了过山车一般,体会了全过程!话不多说,摆出问题,解决问题!

    当你成功启动uWSGI服务时:

    我的需求是将服务器中目录里面的图片,通过zipfile函数借助BytesIO()一次性打包,下载到本地;

    在本地,我将代码都调试完成,并且成功跑通,将Flask项目目录里面的图片一次性打包下载到了本地,然后解压,图片存在,很完美;

    随后我将本地项目通过winSCP上传到服务器Flask项目目录里面,一切都按照计划执行;

    然后启动虚拟环境,重启Nginx,启动uWSGI,调用test/upload接口正常,调用download接口报错......(心态爆炸)

     这个问题网上的解释不多,唯一看懂的就是说BytesIO没有closed(),后来尝试了,不好使,放弃了,心更加凉了,2-3个小时没有解决。。

    在我快绝望是时候,我打开了Google,将问题语句复制到了输入框,寻求最后的答案....

    希望来了:

    这应该是一位外国学者:https://beenje.github.io/blog/posts/uwsgi-send_file-and-python35/

    解决方法:

     As described, you should run uwsgi with the --wsgi-disable-file-wrapper flag to avoid this problem. As with all command line options, you can add the following entry in your uwsgi.ini file:

    # 打开uwsgi.ini配置文件,在文件里面添加一行内容:
    wsgi-disable-file-wrapper = true
    

    文章解释:

    I have a Flask app that returns an in-memory bytes buffer (io.Bytesio) using Flask send_file function.

    The app is deployed using uWSGI behind Nginx. This was working fine with Python 3.4.

    Note that uWSGI 2.0.12 is required.

    When searching in uWSGI documentation, I only found one match in uWSGI 2.0.12 release notes.

    总的来说,对于配置文件这一句话的内容,我理解的是python版本和uWSGI版本的问题,至于深入理解,就看你们的了。

    然后重新启动uWSGI服务,重新打开报错的接口,完美运行,成功解决问题。

    真的很感谢这位外国友人的文章,感谢!你们遇到了这个问题可以尝试一下。

  • 相关阅读:
    jsfl 常用自定义方法
    jsfl 常用方法
    Java 跨平台原理
    JDK、JRE 和 JVM 的区别
    win10 中安装 JDK8 以及环境配置
    JDK 14 都已经发布了,Java 8 依然是我的最爱
    DOS 命令大全用法详解
    《Java程序设计基础》 第4章手记
    堆和栈的区别
    CC#JavaPython 基本数据类型比较
  • 原文地址:https://www.cnblogs.com/aidenzdly/p/10756077.html
Copyright © 2020-2023  润新知