#python #fastapi #asgi #pants #nginx-unit
#python #fastapi #asgi #Брюки #nginx-unit
Вопрос:
Кросс-пост из https://github.com/pantsbuild/pex/issues/1181 поскольку я действительно не знал, где спросить об этом.
Я использую модуль Nginx, который имеет конфигурацию ASGI для моего приложения FastAPI. Он работает нормально, но я понятия не имею, как использовать его с PEX.
Я прикрепил его ниже, но важным моментом является то, что для модуля Nginx существует плагин Python, который ищет «модуль» и «вызываемый».
Сейчас это выглядит как «apigateway.main:app», похожий на uvicorn или любую другую реализацию сервера, которую вы используете. В отличие от uvicorn, gunicorn или любого другого — я не думаю, что смогу упаковать какой-либо другой инструмент в свой файл pex и использовать PEX_SCRIPT.
Есть ли какие-либо предложения о том, могу ли я предоставить модуль и переменную за пределами pex?
{
"listeners": {
"*:80": {
"pass": "routes"
}
},
"routes": [
{
"action": {
"pass": "applications/api"
}
}
],
"applications": {
"api": {
"type": "python 3.9",
"path": "/app",
"module": "apigateway.main",
"callable": "app",
"limits": {
"requests": 100
},
"processes": {}
}
},
"access_log": "/var/log/access.log"
}
Ответ №1:
Ответ на этот вопрос был дан в тикете Github (https://github.com/pantsbuild/pex/issues/1181 ):
Весь традиционный язык здесь предназначен для перехода к недавней функции инструмента venv pex, выпущенной с Pex 2.1.22. Если вы создаете свой файл PEX с поддержкой venv (добавьте —include-tools в командную строку Pex), вы получаете возможность создавать venv из своего файла PEX. Это одноразовый ручной шаг на целевой машине или изображении:
PEX_TOOLS=1 ./my.pex venv /app, который создаст виртуальную среду, содержащую ваше приложение и его зависимости в /app . Вы можете указать туда модуль Nginx с помощью home. Я сделал все это на https://github.com/jsirois/pex-issues-1181 чтобы доказать, что это работает.