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

标签 python deployment nginx production-environment eve

现在还没有时间将我的 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/

相关文章:

linux - CentOS配置Nginx加载Laravel 5.8 Site

python - UnsatisfiableError:发现以下规范存在冲突:-opencv3-> python 2.7 *-python 3.6 *

python - 在 python 中使用 azure REST api 将 Runbook 创建为草稿时,我遇到了错误...!

python - 数学运算符区别 *= 或 +=

ruby-on-rails - 部署 Rails 应用程序

mysql - Rails 部署 - 数据库未上传

deployment - 在 JBoss 上热部署 - 如何对 JBoss "see"进行更改?

python - golang 像 python 一样定义 dict,并将值附加到 dict 中的列表

wordpress - 特定路径和某些文件类型的 Nginx 位置 block

Apache还是nginx?我想了解Nginx的基本工作流程,其优点和缺点