提问人:madx 提问时间:10/13/2023 最后编辑:madx 更新时间:10/15/2023 访问量:87
使用 mod_wsgi 在 Jelastic PaaS 环境中使用 FastAPI 运行 ASGI 应用程序
Run ASGI Application with FastAPI inside a Jelastic PaaS Environment using mod_wsgi
问:
我想在我的 python 项目中使用,我想将其部署在 Jelastic PaaS 上。
显然只管理WSGI应用程序,所以我试图像这样在WSGI应用程序中运行ASGI应用程序,这是我的:FastAPI
mod_wsgi
a2wsgi
wsgi.py
import os, sys
virtenv = os.path.expanduser('~') + '/virtenv/'
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
if sys.version.split(' ')[0].split('.')[0] == '3':
exec(compile(open(virtualenv, "rb").read(), virtualenv, 'exec'), dict(__file__=virtualenv))
else:
execfile(virtualenv, dict(__file__=virtualenv))
except IOError:
pass
sys.path.append(os.path.expanduser('~'))
sys.path.append(os.path.expanduser('~') + '/ROOT/')
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
from a2wsgi import ASGIMiddleware
application = ASGIMiddleware(app)
这些行已经为我的特定执行:virtenv
virtualenv virtenv
source virtenv/bin/activate
pip install a2wsgi
pip install fastapi
deactivate
但它仍然无法正常工作。可能我错过了一些大东西。 这个错误似乎没有“说话”(但我不是python人):
mod_wsgi (pid=14438): Failed to exec Python script file '/var/www/webroot/ROOT/wsgi.py'.
mod_wsgi (pid=14438): Exception occurred processing WSGI script '/var/www/webroot/ROOT/wsgi.py'.
Traceback (most recent call last):
File "/var/www/webroot/ROOT/wsgi.py", line 24, in <module>
from fastapi import FastAPI
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/__init__.py", line 7, in <module>
from .applications import FastAPI as FastAPI
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/applications.py", line 16, in <module>
from fastapi import routing
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/routing.py", line 22, in <module>
from fastapi import params
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/params.py", line 5, in <module>
from fastapi.openapi.models import Example
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/openapi/models.py", line 4, in <module>
from fastapi._compat import (
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/_compat.py", line 20, in <module>
from fastapi.exceptions import RequestErrorModel
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/exceptions.py", line 3, in <module>
from pydantic import BaseModel, create_model
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/pydantic/__init__.py", line 12, in <module>
from . import dataclasses
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/pydantic/dataclasses.py", line 11, in <module>
from ._internal import _config, _decorators, _typing_extra
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/pydantic/_internal/_decorators.py", line 15, in <module>
from ..fields import ComputedFieldInfo
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/pydantic/fields.py", line 19, in <module>
import annotated_types
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/annotated_types/__init__.py", line 361, in <module>
IsNotFinite = Annotated[_NumericType, Predicate(Not(math.isfinite))]
^^^^^^^^^^^^^^^^^^
TypeError: Not() takes no arguments
完整背景:
APACHE_VERSION=2.4.57
DOCKER_EXPOSED_PORT=21,22,25,443,7979,80
MOD_WSGI_VERSION=4.9.4
OWASP_MODSECURITY_CRS_VERSION=3.3.2
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PYTHON_VERSION=3.12.0
STACK_VERSION=2.4.57
VERSION=3.12.0
WEBROOT=/var/www/webroot
WSGI_SCRIPT=/var/www/webroot/ROOT/wsgi.py
答:
1赞
madx
10/15/2023
#1
我找到了一个简单的解决方案。
我降级了 jelastic 容器:apachepython
- 从
2.4.57-python-3.12.0
- 至 或
2.4.57-python-3.9.18
2.4.57-python-3.11.6
它奏效了。
您可以按照我在 github 上的这个公共存储库中编写的步骤在您自己的 Jelastic 环境中测试它:danielemaddaluno/pyjel
评论
Not(math.isfinite)
gunicorn wsgi:application