现在还没有时间将我的 Python Eve Api 转移到生产环境中。有多种方法可以做到这一点,最常见的要求是:
- 错误记录
- 自动重生
- 多进程(如果可能)
我找到的最佳解决方案是使用 nginx 服务器作为前端服务器。 python eve 在 uWSGI 中间件上运行。
问题:我有一个自定义的 __main__
,它没有被 uwsgi 调用。
是否有人在运行此配置或其他建议?一旦它工作,我将分享一个运行配置。
谢谢。
解决方案(更新):
根据下面的提议,我将 Eve() 方法移动到 init.py 并使用单独的 wsgi.py 运行应用程序。
文件夹结构:
网络服务/初始化.py 网络服务/模块/... 设置.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
关于python - 在生产环境中运行 Python Eve Rest API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22577162/