Однако проблема заключается в том, что во время развертывания таблицы не создаются в базе данных. Несмотря на успешное подключение, приложение взаимодействует только с существующими таблицами (если они уже созданы), но не может создать новые при попытке инициализировать схему базы данных.
Вот что я что уже сделано:
- Проверено, правильно ли установлена переменная среды DATABASE_URL в переменных среды Vercel.
- Приложение FastAPI отлично работает локально, и таблицы создаются при его запуске на локальном компьютере.
- Я убедился, что логика создания таблиц запускается в приложении FastAPI. . Вот код для создания движка и таблицы:
Код: Выделить всё
db.pyКод: Выделить всё
from sqlmodel import SQLModel, create_engine
import os
database_url = os.getenv("DATABASE_URL")
if not database_url:
raise ValueError("DATABASE_URL environment variable not set")
#Note: My DATABASE_URL also starts with postgresql://.... and is hosted online
engine = create_engine(database_url)
def init_db():
SQLModel.metadata.create_all(engine)
Код: Выделить всё
main.pyКод: Выделить всё
from fastapi import FastAPI
import uvicorn
from contextlib import asynccontextmanager
from db import engine, init_db
@asynccontextmanager
async def lifespan(app: FastAPI):
try:
init_db()
yield
finally:
await engine.dispose()
app = FastAPI(
lifespan=lifespan)
if __name__ == "__main__":
uvicorn.run(app)
- Я пробовал повторно развернуть приложение несколько раз и даже пробовал разные способы запуска создания таблицы, но Vercel, похоже, этого не делает. создайте их в базе данных PostgreSQL.
- Проверил логи в Vercel, ошибок, связанных с подключением к базе данных или созданием таблиц, нет.
Почему Vercel может не создавать новые таблицы в базе данных PostgreSQL, даже если приложение успешно подключается к базе данных и, что удивительно, localhost создает таблицы по тому же URL-адресу, но Vercel нет? Нужно ли что-то настроить в Vercel по-другому, чтобы создание таблиц работало? Будем очень признательны за любые советы или шаги по отладке!
Подробнее здесь: https://stackoverflow.com/questions/790 ... i-sqlmodel