在生产环境中运行Python Eve Rest API

4
现在是时候将我的Python Eve Api移入生产环境了。有几种方法可以做到这一点,最常见的要求如下:
- 错误日志记录 - 自动重启 - 多个进程(如果可能的话)
我发现最好的解决方案是使用nginx服务器作为前端服务器,并且在uWSGI中运行python eve。
问题是:我有一个自定义的__main__,但uwsgi没有调用它。
有没有人正在运行这种配置或者有其他提议?只要它能工作,我就会分享一个运行配置。
谢谢。
解决方案(更新):
根据以下建议,我将Eve()方法移动到init.py中,并使用单独的wsgi.py运行应用程序。
文件夹结构:
webservice/ init.py webservice/modules/... 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
1个回答

4

WSGI容器期望可调用/函数来运行,它们不执行您的“main”入口。使用run:Eve,您要求uWSGI在每个请求时执行“run”模块中的“Eve”函数(这显然是错误的)。

移动

app = Eve(auth=globalauth.TokenAuth)

将代码移出__main__检查,并告诉uWSGI使用“run”模块中的“app”可调用对象。

module = run:app

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接