阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

uWSGI安装过程中遇到的问题及解决

206次阅读
没有评论

共计 3105 个字符,预计需要花费 8 分钟才能阅读完成。

uWSGI 是在像 nginx、lighttpd 以及 cherokee 服务器上的一个部署的选择。更多选择见 FastCGI 和 独立 WSGI 容器。你会首先需要一个 uWSGI 服务器来用 uWSGI 协议来使用你的 WSGI 应用。uWSGI 是一个协议,同样也是一个应用服务器,可以提供 uWSGI、FastCGI 和 HTTP 协议。

最流行的 uWSGI 服务器是 uwsgi,我们会在本指导中使用。确保你已经安装好它来跟随下面的说明。

注意:
 
请提前确保你在应用文件中的任何 app.run() 调用在 if __name__ == ‘__main__’: 块中或是移到一个独立的文件。这是因为它总会启动一个本地的 WSGI 服务器,并且我们在部署应用到 uWSGI 时不需要它。

用 uwsgi 启动你的应用

uwsgi 被设计为操作在 Python 模块中找到的 WSGI 可调用量。

已知在 myapp.py 中有一个 flask 应用,使用下面的命令:

$ uwsgi -s /tmp/uwsgi.sock –module myapp –callable app

或者,你喜欢这样:

$ uwsgi -s /tmp/uwsgi.sock -w myapp:app

 

配置 nginx

一个基本的 flaks uWSGI 的给 nginx 的配置看起来是这样:

location = /yourapplication {rewrite ^ /yourapplication/;}
location /yourapplication {try_files $uri @yourapplication;}
location @yourapplication {
  include uwsgi_params;
  uwsgi_param SCRIPT_NAME /yourapplication;
  uwsgi_modifier1 30;
  uwsgi_pass unix:/tmp/uwsgi.sock;
}

这个配置绑定应用到 /yourapplication。如果你想要绑定到 URL 根会更简单,因你不许要告诉它 WSGI SCRIPT_NAME 或设置 uwsgi modifier 来使用它:

location / {try_files $uri @yourapplication;}
location @yourapplication {
    include uwsgi_params;
    uwsgi_pass unix:/tmp/uwsgi.sock;
}

———————————————————

[root@www.linuxidc.com webserver]# uwsgi –http :9090 –wsgi-file home.py –daemonize /var/log/uwsgi.log –master –harakiri 60 –socket-timeout 10 -w home:app

如果出现错误:

uwsgi: option‘–http‘is ambiguous

换成这种写法

uwsgi –http-socket :9090 –wsgi-file home.py –daemonize /var/log/uwsgi.log –master –harakiri 60 –socket-timeout 10 -w home:app

囧,接着又出现错误:

uwsgi: unrecognized option‘–wsgi-file‘

sudo uwsgi –http-socket :9090 –plugin python  –wsgi-file home.py –daemonize /var/log/uwsgi.log –master –harakiri 60 –socket-timeout 10 -w home:app

sudo /usr/local/bin/uwsgi –http-socket :9090 –plugin python  –wsgi-file /home/wwwroot/webserver/home.py –daemonize /var/log/uwsgi.log –master –harakiri 60 –socket-timeout 10 -w home:app

给出的解释是:

uwsgi 时都会碰到 uwsgi: unrecognized option‘–uwsgi-file‘如 –module , –wsgi-file , –callable 等,最 始我也碰到这样的问题,uwsgi –help 得到一大堆帮助信息(吐槽下,uWSGI 用户接口方面太不友好了,输出这么一大堆信息会吓着初学者,而且也 很难从中找到需要的帮助信息,要是你用管道加 less,那我就无话可说了),找了下发现的确没有这些选项,第一反应是版本对不上,后来发现相同版本也 会遇到这个问题,然后才找到问题的根源,需要 在上面那些未识别选项前加上 –plugin python 来告诉 uWSGI 我在使用 python 插件,后面那些选项你 用 python 插件去解析

遇到的问题:

发现用的 uwsgi 是 python 2.6.6 版本的,于是 sudo yum remove uwsgi,然后使用 sudo pip install uwsgi, 此时的话就不需要加 –plugin python 的参数,写为

sudo /usr/local/bin/uwsgi –http-socket :9090 –wsgi-file /home/wwwroot/webserver/home.py –daemonize /var/log/uwsgi.log –master –harakiri 60 –socket-timeout 10 -w home:app

即可。

更多参考

Nginx+uWSGI+Supervisor 在 Ubuntu 上部署 Flask 应用  http://www.linuxidc.com/Linux/2016-07/133064.htm

Ubuntu Server 12.04 安装 Nginx+uWSGI+Django 环境 http://www.linuxidc.com/Linux/2012-05/60639.htm 

Django+Nginx+uWSGI 部署 http://www.linuxidc.com/Linux/2013-02/79862.htm 

Nginx+uWSGI+Django+Python 应用架构部署  http://www.linuxidc.com/Linux/2015-10/124183.htm

Ubuntu Server 14.04.2 LTS 配置 Nginx + Uwsgi + Django  http://www.linuxidc.com/Linux/2015-04/116397.htm

Flask+uWSGI+Nginx+Ubuntu 部署教程 http://www.linuxidc.com/Linux/2016-06/132690.htm

Ubuntu 16.04 下安装部署 Nginx+uWSGI+Django1.9.7  http://www.linuxidc.com/Linux/2016-07/133484.htm

Nginx+uWSGI+Django 在 Ubuntu 下的部署  http://www.linuxidc.com/Linux/2016-07/133490.htm

Linux 上利用 Nginx 代理 uWSGI 处理 Flask Web 应用  http://www.linuxidc.com/Linux/2016-08/134164.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-12/137829.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3105字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中