pymongo.errors.InvalidURI 连接到 github runner 上的 mongodb 时

问题描述 投票:0回答:1

我正在尝试运行一个 python 脚本,该脚本使用 amazon linux 2 上的自托管 github 运行程序连接到 mongo atlas 数据库。但是在运行该脚本时,我收到错误

pymongo.errors.InvalidURI: Invalid URI scheme: URI must begin with 'mongodb://' or 'mongodb+srv://'
。 这是问题步骤的片段:

      - name: Populate VectorDB
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}
          PINECONE_INDEX_NAME: ${{ needs.creates-ephemeral-env.outputs.pinecone_index_name }}
          MONGODB_URI: ${{ needs.creates-ephemeral-env.outputs.mongodb_uri }}
          MONGODB_USERNAME: ${{ secrets.MONGODB_USERNAME }}
          MONGODB_PASSWORD: ${{ secrets.MONGODB_PASSWORD }}
          MONGODB_NAME: ${{ env.MONGODB_NAME }}
        run: |
          cd database/scripts/populate_pinecone_db
          python3 -m venv venv
          source venv/bin/activate
          pip3 install -r requirements.txt
          python3 -u script.py

这是我的要求.txt:

pinecone-client==3.1.0
pymongo==4.4.0
langchain-openai==0.0.5
sql-metadata==2.8.0

uri 是有效的,因为我尝试在本地连接到数据库,并且当我使用相同的映像在 ec2 上启动单独的实例时,我能够使用相同的 uri 连接到 mongo 数据库。我还在前面的步骤中使用了

secrets.MONGODB_USERNAME
secrets.MONGODB_PASSWORD
,它们也有效。我不知道为什么 pymongo 会这样。

当我从 python 打印 uri 时,我得到以下信息:

"***[connect_uri].mongodb.net"

这是我的Python代码的一部分:

import os

import pymongo
from pinecone import Pinecone
from sql_metadata import Parser

pinecone_api_key = os.environ.get("PINECONE_API_KEY")

pinecone_index_name = os.environ.get("PINECONE_INDEX_NAME")
mongodb_uri = os.environ.get("MONGODB_URI")
mongodb_username = os.environ.get("MONGODB_USERNAME")
mongodb_password = os.environ.get("MONGODB_PASSWORD")
mongodb_name = os.environ.get("MONGODB_NAME")

if __name__ == "__main__":
    connection_string = mongodb_uri.replace(
        "mongodb+srv://", f"mongodb+srv://{mongodb_username}:{mongodb_password}@"
    )
    data_store = pymongo.MongoClient(connection_string)[mongodb_name]
    ...

Pymongo 应该成功连接到 mongo atlas 数据库,因为我已经配置了正确的网络访问以及用户名和密码

mongodb github-actions pymongo
1个回答
0
投票

这很愚蠢,但我发现了,

needs.creates-ephemeral-env.outputs.mongodb_uri
的输出来自terraform,我将变量设置为
mongodb_uri=$(terraform output appservice_name_dev)
,其中包含双引号作为字符串的一部分,因此连接uri无效。我不得不将其更改为
$(terraform output -raw appservice_name_dev)

© www.soinside.com 2019 - 2024. All rights reserved.