zoukankan      html  css  js  c++  java
  • uwsgi启动flask项目(venv虚拟环境)

    一、下载uwsgi:

    pip3 install uwsgi

    [uwsgi: command not found]解决办法:建立软链接 

    ln -s pip下载的uwsgi目录 /usr/bin/uwsgi

    例如:ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3

    注意:有些机器配置的不止一个uwsgi,所以要看uwsgi命令映射的是哪个python版本的,也可以像我这样,给python3环境的uwsgi映射成uwsgi3。

    二、配置虚拟环境:

    方式一:利用venv方式创建虚拟环境

    1、通过命令创建一个虚拟环境目录

    python3 -m venv /home/pkuokuo/venv/my_system

    会自动生成该目录

     2、激活虚拟环境

    source /home/pkuokuo/venv/my_system/bin/activate

    3、 进入到虚拟环境下

    这里面就可以使用虚拟目录环境,直接在虚拟环境中pip下载所需要的依赖包。光标前面带一个括号,代表是在虚拟环境下

     

    4、退出虚拟环境命令:

    deactivate

    方式二:配置virtualenv虚拟环境

    三、启动uwsgi

    1、启动命令:

    uwsgi uwsgi.ini

    2、uwsgi.ini:

    #uwsgi --ini uwsgi.ini             # 启动
    #uwsgi --reload uwsgi.pid          # 重启
    #uwsgi --stop uwsgi.pid            # 关闭
    
    
    [uwsgi]
    # 字符编码
    env=LC_ALL=en_US.UTF-8
    
    # 指定IP端口
    http = :8386
    
    # the local unix socket file than commnuincate to Nginx   用于和 nginx 进行数据交互的端口
    #socket = 127.0.0.1:8001
    
    # 项目目录
    chdir = /opt/my_system
    
    # 启动文件地址
    wsgi-file = /opt/my_system/manage.py
    #wsgi-file = my_system/manage.py
    
    # uWSGI加载的模块中哪个变量将被调用
    callable = app
    
    # 自动移除unix Socket和pid文件当服务停止的时候
    vacuum = true
    
    # socket权限设置
    #chmod-socket = 664
    
    # uWSGI服务器运行时的用户id
    uid=root
    
    # uWSGI服务器运行时的用户组id
    gid=root
    
    # 启用主进程
    master = true
    
    # 进程个数,工作进程的最大数量
    processes = 5
    
    # 主进程id文件目录
    pidfile = /opt/my_system/uwsgi.pid
    
    # 启用线程
    enable-threads=true
    
    # 在每个辅助进程中启动的线程数
    threads=4
    
    # 一个高阶的cheap模式,在启动的时候只会分配n个工作进程,并使用自适应算法启动新的进程,must be lower than processes
    #cheaper = 10
    
    # 在经过sec秒的不活跃状态的进程会被销毁(进入了cheap模式),并最少保留cheaper指定的进程数
    #idle = 3600
    
    # 设置自中断时间,设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
    harakiri=30
    
    # 当一个请求被harakiri杀掉会,会输出一条日志
    harakiri-verbose = true
    
    # 开启内存使用情况报告
    memory-report = true
    
    # 设置平滑的重启(直到处理完接收到的请求)的长等待时间(秒)
    reload-mercy = 10
    
    # 设置缓冲
    #post-buffering=4096
    
    # 控制台输出日志目录
    daemonize = /var/log/53kf/my_system/my_system.log
    
    # 设置日志监听对象
    #logto=/var/log/53kf/my_system
    #touch-logreopen=/var/log/53kf/my_system/.touchforlogrotat
    
    # 通过该端口可以监控 uwsgi 的负载情况
    stats = 127.0.0.1:8387
    
    # 配置虚拟环境路径
    virtualenv = /home/pkuokuo/venv/my_system
    
    #设置用于uwsgi包解析的内部缓存区大小为64k。默认是4k。
    #buffer-size=65536
    
    #在每个worker而不是master中加载应用
    #lazy-apps=true
    
    
    
    # 设置工作进程使用虚拟内存超过N MB就回收重启
    #reload-on-as= 1024
    
    # 自动给进程命名
    #auto-procname = true
    
    # 为进程指定前缀
    #procname-prefix-spaced = xc-mms
    
    # 设置工作进程每处理N个进程就会被回收重启
    #max-requests=500000
     
    # 设置工作进程使用物理内存超过N MB就回收重启
    #reload-on-rss=100
    
    # 设置socket超时时间,默认4秒
    #socket-timeout=10
     
    # 限制http请求体的大小(Bytes)
    #limit-post=4096
    
    # clear environment on exit
    #vacuum = true
    
    # 不记录request日志,只记录错误日志
    #disable-logging = true
     
    # 将日志打印到syslog上
    #log-syslog = true
    
    #stats = /opt/my_system/uwsgi.status

    3、访问失败或者访问接收不到可能是因为开了防火墙。

    centos7查看防火墙状态:

    systemctl status firewalld.service

    关闭运行的防火墙:

    systemctl stop firewalld.service    

    四、问题总结

     错误1:

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 32-40: ordinal not in range(128)

    原因是打印日志的时候打印了中文。

    log.info('初始化热门产品')

     解决:

    该问题是由于操作系统文件编码格式的问题,

     可以查看服务器的编码,利用命令:locale

     

    (C指的是标准 ISO C的区域机制;区域支持指的是应用遵守文化偏好的问题,包括字母表、排序、数字格式等) 

    可以看到除了第一个为utf-8外,其他的都为默认格式。这样对中文编码可能会引起中文编码异常,我们需要将所有参数都配置成utf-8的:

    export LC_ALL=en_US.UTF-8

    运行上面这句代码后,便将所有的参数设置成utf-8

     这样运行就不会出现中文编码错误了,但是对于公共系统环境,随意的更改系统编码可能会导致其他项目出现问题,所以这里提供的解决办法:单独对这一个项目进行配置,所以我们在uwsgi的启动配置文件uwsgi.ini中加入这个配置:

    # 字符编码
    env=LC_ALL=en_US.UTF-8

    这样就完美的解决了这一个项目的字符编码问题,也不会影响到其他的项目运行。

    注: 

    1、 LANG是一个缺省值,所有没有显式设置值的LC_*变量都会取LANG的值。
    2、 LANGUAGE的优先级比较高,会覆盖所有设置过的LC_*的值
    3、 LC_ALL并不是一个环境变量,而是一个glibc中定义的一个宏,LC_ALL=C这样的语法实际上是调用了setlocale把所有的LC_*的变量设置了一遍。

    从优先级的角度,变量生效的优先顺序从高到低如下:

    1、 LANGUAGE 优先级最高,指定个人对语言环境值的主次偏好,例如zh_CN:en_US:en,冒号分隔的是多种选择。
    2、 LC_ALL 设置的值
    3、 LC_* 可设定locale各方面(category)的值,可以覆盖LANG的值。
    4、LANG 指定默认使用的locale值


    分享所感,如有侵权,请联系删除,可扫码关注微信公众号获取更多福利噢。
    (您的“打赏”将是我最大的写作动力!转载请注明出处.)

    关注微信公众号

  • 相关阅读:
    删除数据库的数据后让id从1开始算
    通过数据库绑定的dropdownlist,如何让其第一条默认显示"--请选择--"
    winform 验证用户正确后打开新窗口时关闭登陆窗口
    winform FormBordStyle=none 及 wpf FormBordStyle=none 的鼠标点击移动问题
    [AngularJS] AngularJS系列(3) 中级篇之表单验证
    linux开启mysql远程登录
    linux下JDK,tomcat的安装与环境变量配置
    linux下mysql连接jar包的位置在哪里?
    linux下mysql忘记root密码的解决方案
    RedHat下MySQL 5.6 安装、维护
  • 原文地址:https://www.cnblogs.com/pengpengdeyuan/p/14742090.html
Copyright © 2011-2022 走看看