Ошибка командной строки Gunicorn в стандартной среде Google App Engine - PullRequest
0 голосов
/ 12 декабря 2018

Я получаю бесконечный поток следующих ошибок после развертывания приложения Flask / Python3 / Postgres в стандартной среде ядра приложения.Вызывает беспокойство предупреждение о пакете Psycopg2, но не то, что приводит к сбою приложения.Скорее, это неверные аргументы командной строки для gunicorn, которые предоставляются GAE, а не мной.Кто-нибудь может успешно развернуть флягу Python3, которая использует Postgres, в стандартную среду?

Вот вывод файла журнала:

2018-12-11 02:51:37 +0000] [3738] [INFO] Booting worker with pid: 3738
2018-12-11 02:51:37 default[20181210t140744]  /env/lib/python3.7/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
2018-12-11 02:51:37 default[20181210t140744]    """)
2018-12-11 02:51:38 default[20181210t211942]  usage: gunicorn [-h] [--debug] [--args]
2018-12-11 02:51:38 default[20181210t211942]  gunicorn: error: unrecognized arguments: main:app --workers 1 -c /config/gunicorn.py
2018-12-11 02:51:38 default[20181210t211942]  [2018-12-11 02:51:38 +0000] [882] [INFO] Worker exiting (pid: 882)

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Из комментария и ответа выше, похоже, проблема должна быть в моем приложении.Я подтвердил, что, запустив gunicorn локально в приложении «без косточек», без каких-либо трудностей, но не смог при запуске реального приложения.

Одним из виновников оказалось использование argparse , которым я былиспользуя, таким образом, я мог бы добавить аргумент «debug» в командную строку при локальной работе.Перемещение этого кода в раздел if __name__ == '__main__': привело к тому, что приложение работало нормально при локальном использовании gunicorn.

Но при развертывании в GAE оно все еще не работает:

2018-12-12 20:09:16 default[20181212t094625]  [2018-12-12 20:09:16 +0000] [8145] [INFO] Booting worker with pid: 8145
2018-12-12 20:09:16 default[20181212t094625]  /env/lib/python3.7/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
2018-12-12 20:09:16 default[20181212t094625]    """)
2018-12-12 20:09:16 default[20181212t094625]  [2018-12-12 20:09:16 +0000] [8286] [INFO] Booting worker with pid: 8286
2018-12-12 20:09:16 default[20181212t094625]  /env/lib/python3.7/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
2018-12-12 20:09:16 default[20181212t094625]    """)
2018-12-12 20:09:19 default[20181212t094625]  usage: gunicorn [-h] [--debug] [--args]
2018-12-12 20:09:19 default[20181212t094625]  gunicorn: error: unrecognized arguments: -b :8081 main:app
2018-12-12 20:09:19 default[20181212t094625]  [2018-12-12 20:09:19 +0000] [8145] [INFO] Worker exiting (pid: 8145)

Вот app.yaml (минуспеременная окружения для SendGrid):

runtime: python37
env: standard
#threadsafe: true
entrypoint: gunicorn --workers 2 --bind :5000 main:app

#runtime_config:
#  python_version: 3

# This beta setting is necessary for the db hostname parameter to be able to handle a URI in the
# form “/cloudsql/...” where ... is the instance given here:
beta_settings:
    cloud_sql_instances: provost-access-148820:us-east1:cuny-courses
0 голосов
/ 12 декабря 2018

По умолчанию, если entrypoint не определено в app.yaml, App Engine будет искать приложение с именем app в main.py.Если вы посмотрите на официальный пример кода в Github , он обращается к нему в файле main.py, объявив:

app = Flask(__name__)

В качестве альтернативы, это можно настроить, добавив entrypointв app.yaml, указывая на другой файл.Например, если вы объявите приложение в файле с именем prod:

entrypoint: gunicorn -b :$PORT prod.app

Вы найдете дополнительные сведения о конфигурации точки входа здесь .

...