Пирамида оружейная и официантка
Я пытаюсь понять поведение пирамиды относительно [main:server]
Конфигурация и Gunicorn.
Если я использую pserve
будет использовать конфигурацию [main:server]
, как для официантки, так и для оружейной. Например:
# development.ini
[server:main]
use = egg:waitress#main
listen = *:6543
А сейчас, $ pserve development.ini
запустит проект с официанткой, что ожидается. Но если я использую команду $ gunicorn
(с gunicorn или официанткой в INI-файле) это также будет работать, чего я не ожидаю.
Мои вопросы:
почему эта конфигурация работает, если я запускаю команду
$ gunicorn --paste development.ini
?что происходит под крюком? официантка работает? (Я бы сказал, что это не в соответствии с процессами в моем компьютере)
2 ответа
Для начала обслуживания запросов для любого приложения WSGI требуются две независимые части конфигурации.
1) Какое приложение WSGI использовать.
2) Какой сервер WSGI использовать.
Эти части обрабатываются отдельно и могут быть выполнены по-разному в зависимости от того, как вы его настроили. Формат файла ini определяется библиотекой PasteDeploy и предоставляет потребителю формата возможность определить как конфигурацию приложения, так и конфигурацию сервера. Однако при использовании gunicorn --paste foo.ini
вы уже говорите gunicorn, что хотите использовать сервер gunicorn (не официантка), поэтому он игнорирует раздел сервера и фокусируется только на загрузке приложения. У Gunicorn на самом деле есть и другие способы загрузки приложения, но я пока проигнорирую эту сложность, поскольку эта часть работает для вас. Любая конфигурация сервера для gunicorn должна быть сделана отдельно... она не читает [server:main]
раздел, когда вы бежите gunicorn
из кли. Или вы можете запустить свое приложение, используя pserve
который использует раздел сервера, чтобы определить, какой сервер использовать - но в вашей текущей настройке будет запущена официантка вместо gunicorn.
Итак, после большого чтения и тестирования, я должен сделать вывод, что:
- с помощью
[main:server]
является обязательным для применения пирамиды - если вы запускаете приложение с gunicorn, вы должны определить это
[main:server]
тем не менее - Gunicorn будет игнорировать
use
атрибут, но пирамида проверит, существует ли яйцо - gunicorn будет использовать остальные параметры (если они есть), но они будут иметь меньший приоритет, чем аргументы командной строки или файл config.py
Причина такого поведения все еще смущает меня, но, по крайней мере, я могу с этим работать. Любые другие советы будут очень благодарны.