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

在GitHub自托管Runner上连接Mongo Atlas时遇pymongo.InvalidURI错误

问题分析与解决方案

问题根源

从你打印的URI结果"***[connect_uri].mongodb.net"可以明确两个核心问题:

  1. URI被包裹在双引号中,导致Python的字符串替换逻辑无法匹配目标前缀
  2. URI本身缺少mongodb+srv://前缀,使得replace("mongodb+srv://", ...)完全找不到替换目标,最终生成的连接字符串没有合法的URI协议头,触发InvalidURI错误

具体解决步骤

1. 修正GitHub Actions输出的URI格式

检查creates-ephemeral-env步骤的输出逻辑,确保mongodb_uri满足两个要求:

  • 不带任何引号
  • 完整包含mongodb+srv://前缀(比如mongodb+srv://cluster0.example.mongodb.net/)

如果该步骤输出的URI自带引号,在设置输出时添加去引号处理:

- name: Generate MongoDB URI output
  id: create-env
  run: |
    # 假设你的原始URI存储在RAW_MONGODB_URI变量中
    CLEAN_URI=$(echo $RAW_MONGODB_URI | tr -d '"')
    echo "mongodb_uri=$CLEAN_URI" >> $GITHUB_OUTPUT

2. 重构Python连接字符串生成逻辑

放弃依赖原URI前缀的替换方式,改用更可靠的拼接逻辑:

if __name__ == "__main__":
    # 确保URI前缀合法
    base_uri = mongodb_uri.strip('"')  # 先移除可能存在的引号
    if not base_uri.startswith(("mongodb://", "mongodb+srv://")):
        base_uri = f"mongodb+srv://{base_uri}"
    
    # 移除URI中可能已有的认证信息,避免重复拼接
    if "@" in base_uri:
        base_uri = base_uri.split("@", 1)[-1]
    
    # 拼接完整认证连接串
    connection_string = f"mongodb+srv://{mongodb_username}:{mongodb_password}@{base_uri}"
    data_store = pymongo.MongoClient(connection_string)[mongodb_name]

3. 添加Action步骤调试

在GitHub Actions的Populate VectorDB步骤中添加调试输出,直接在日志中确认环境变量的实际值:

run: |
  cd database/scripts/populate_pinecone_db
  # 打印URI的原始值(仅用于调试,不要打印敏感信息)
  echo "DEBUG: MONGODB_URI value is: $MONGODB_URI"
  python3 -m venv venv
  source venv/bin/activate
  pip3 install -r requirements.txt
  python3 -u script.py

4. 验证依赖安装完整性

在pip安装后添加版本验证,确保pymongo正确安装:

pip3 show pymongo
python3 -c "import pymongo; print('pymongo version:', pymongo.__version__)"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:57:18