微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在生产中运行Python Eve Rest API

现在没时间将我的Python Eve Api转移到生产环境中了.有几种方法可以做到这一点,最常见的要求是:

>错误记录
>自动重生
>多个流程(如果可能)

我找到的最佳解决方案是将Nginx服务器作为前端服务器.
使用python eve在uWsgi中间件上运行.

问题:我有一个自定义的__main__,它不是由uwsgi调用的.

是否有人运行此配置或其他提案?一旦它工作,我将分享一个运行配置.

谢谢.

解决方案(更新):

基于下面的提议,我将Eve()方法移动到init.py并使用sperate wsgi.py运行应用程序.

文件夹结构:

webservice / init.py
Web服务/模块/ …
settings.py
wsgi.py

init.py包含的位置

app = Eve(auth=globalauth.TokenAuth)
Bootstrap(app)
app.config['X_DOMAINS'] = '*'
...

和wsgi.py包含

from webservice import app
if __name__ == "__main__":
  app.run()

wsgi.ini

[uwsgi]
chdir=/var/www/api/prod
module=wsgi:app
socket=/tmp/api.sock
processes=1
master=True
pidfile=/tmp/api.v1.pid
max-requests=5000
daemonize=/var/www/api/logs/prod.api.log
logto=/var/www/api/logs/uwsgi.log

Nginx.conf

location = /v1 { rewrite ^ /v1/; }
    location /v1 { try_files $uri @apiWsgiv1; }
    location @apiWsgiv1 {
              include uwsgi_params;
              uwsgi_modifier1 30;
              uwsgi_pass unix:/tmp/digdisapi.sock;
    }

启动命令:

uwsgi --ini uwsgi.ini

解决方法:

Wsgi容器期望运行可调用/函数,它们不执行“主”条目.使用run:Eve,你要求uWsgi(在每次请求时)执行“run”模块中的“Eve”功能(这显然是错误的)

移动

app = Eve(auth=globalauth.TokenAuth)

退出__main__检查并告诉uWsgi使用“run”模块中的’app’可调用

module = run:app

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐