Запуск Python Eve Rest API в производственной среде

Сейчас не время переносить мой Python Eve Api в производственную среду. Есть несколько способов сделать это, и наиболее распространенными требованиями являются:

  • Регистрация ошибок
  • Автоматическое возрождение
  • Несколько процессов (если возможно)

Лучшее решение, которое я нашел, — использовать сервер nginx в качестве внешнего сервера. С python eve, работающим на промежуточном программном обеспечении uWSGI.

Проблема: у меня есть пользовательский __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

person Simon Fakir    schedule 22.03.2014    source источник


Ответы (1)


Контейнеры WSGI ожидают запуска вызываемой функции/функции, они не выполняют вашу «основную» запись. С run:Eve вы просите uWSGI выполнять (при каждом запросе) функцию «Eve» в модуле «run» (это явно неправильно)

Шаг

app = Eve(auth=globalauth.TokenAuth)

из проверки __main__ и скажите uWSGI использовать вызываемое «приложение» в модуле «запустить» с

module = run:app
person roberto    schedule 23.03.2014