在生产中运行Python Eve Rest API

现在是时候将我的Python Eve API移动到生产环境中了。 有几种方法可以做到这一点,最常见的要求是:

  • 错误logging
  • 自动重生
  • 多个进程(如果可能的话)

我find的最好的解决scheme是有一个nginx服务器作为前端服务器。 随着python前夕在uWSGI中间件上运行

问题:我有一个不被uwsgi调用的自定义__main__

有没有人有这个configuration运行或另一个build议? 一旦它起作用,我将分享一个正在运行的configuration。

谢谢。

解决scheme(更新):

根据以下的build议,我将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 

    WSGI容器需要一个可调用/函数来运行,它们不执行你的“主”条目。 运行:Eve,你要求uWSGI在“run”模块中执行(每次请求)“Eve”函数(这显然是错误的)

    移动

     app = Eve(auth=globalauth.TokenAuth) 

    __main__检查之外,并告诉uWSGI使用“run”模块中可调用的“app”

     module = run:app