You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

连接Supabase时出现ASGI应用异常,请求协助排查解决

解决Supabase连接的socket.gaierror错误

这个错误nodename nor servname provided, or not known本质是无法解析Supabase项目URL对应的域名,核心原因集中在环境变量加载、URL格式或异步代码调用问题上,以下是分步修复方案:


1. 检查.env文件的位置与内容

  • 确保.env文件放在项目根目录(和主运行脚本如main.py同一层级)
  • 验证SUPABASE_PROJECT_URL格式:必须是Supabase控制台复制的完整HTTPS地址,格式为https://<project-id>.supabase.co,不能省略https://,也不能有多余空格或引号
  • 示例正确的.env内容:
    SUPABASE_PROJECT_URL=https://your-project-reference.supabase.co
    SUPABASE_PUBLIC_API_KEY=your-public-anon-key-here
    CALLBACK_URL=http://localhost:8000/callback
    

2. 确认环境变量已正确加载

在创建Supabase客户端的代码中添加验证打印,排查变量是否为空:

from dotenv import load_dotenv
from supabase import create_client, Client
import os

load_dotenv()

url: str = os.getenv("SUPABASE_PROJECT_URL")
key: str = os.getenv("SUPABASE_PUBLIC_API_KEY")

# 添加验证打印
print(f"Loaded Supabase URL: {url}")
print(f"Loaded API Key: {key[:10]}..." if key else "API Key NOT loaded")

supabase: Client = create_client(url, key)
  • 如果打印出url为None,说明.env未被正确加载,可指定路径:load_dotenv(dotenv_path="./path/to/your/.env")

3. 验证Supabase项目URL的有效性

  • 直接在浏览器中打开你的SUPABASE_PROJECT_URL,确认能正常访问Supabase的API文档页面
  • 重新从Supabase控制台的「Settings → API」页面复制项目URL,避免手动输入导致的拼写错误

4. 修复异步接口中的同步Supabase调用

你的FastAPI接口是异步(async def),但使用了同步Supabase客户端,这会阻塞事件循环并可能引发网络异常,建议改用异步客户端:

# 替换同步客户端为异步版本
from supabase import create_async_client, AsyncClient
from dotenv import load_dotenv
import os

load_dotenv()

url: str = os.getenv("SUPABASE_PROJECT_URL")
key: str = os.getenv("SUPABASE_PUBLIC_API_KEY")

supabase: AsyncClient = create_async_client(url, key)

# 数据查询函数改为异步,添加await
async def get_all_cdms():
    return await supabase.table(TABLE_NAME).select("*").execute()

# 接口中也要await异步函数
@app.get("/cdms")
async def get_all_cdms(page: str | None = None):
    if not page: 
        all_cdms = await cdms.get_all_cdms()
        return {"cdms": all_cdms}
    else:
        to_item = int(page)*10
        from_item = to_item - 10
        select_cdms = await cdms.get_cdm_in_range(from_item, to_item)
        return {"from": from_item, "to": to_item, "cdms": select_cdms}

5. 排查网络代理问题

如果在公司或代理网络环境下,需要为Supabase的HTTP客户端配置代理:

from httpx import AsyncClient as HttpxAsyncClient
from supabase import create_async_client

supabase = create_async_client(
    url,
    key,
    http_client=HttpxAsyncClient(proxies="http://your-proxy-address:port")
)

内容的提问来源于stack exchange,提问作者Naman Nagelia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:47:02