I'm getting ServerSelectionTimeoutError when connecting to Mongodb Atlas

Summary

Hello,
I’m getting that error every time i try to connect to Mongodb Atlas, but if i start app localy it works fine.

ServerSelectionTimeoutError: ac-8fsp34n-shard-00-01.su8tngo.mongodb.net:27017: connection closed,ac-8fsp34n-shard-00-00.su8tngo.mongodb.net:27017: connection closed,ac-8fsp34n-shard-00-02.su8tngo.mongodb.net:27017: connection closed, Timeout: 30s, Topology Description: <TopologyDescription id: 648d8d52875c993fdb5bdb11, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('ac-8fsp34n-shard-00-00.su8tngo.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-8fsp34n-shard-00-00.su8tngo.mongodb.net:27017: connection closed')>, <ServerDescription ('ac-8fsp34n-shard-00-01.su8tngo.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-8fsp34n-shard-00-01.su8tngo.mongodb.net:27017: connection closed')>, <ServerDescription ('ac-8fsp34n-shard-00-02.su8tngo.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-8fsp34n-shard-00-02.su8tngo.mongodb.net:27017: connection closed')>]>
Traceback:
File "/app/cards_editor/database.py", line 25, in ping
    client.admin.command('ping')
File "/home/appuser/venv/lib/python3.9/site-packages/pymongo/_csot.py", line 105, in csot_wrapper
    return func(self, *args, **kwargs)
File "/home/appuser/venv/lib/python3.9/site-packages/pymongo/database.py", line 805, in command
    with self.__client._socket_for_reads(read_preference, session) as (
File "/home/appuser/venv/lib/python3.9/site-packages/pymongo/mongo_client.py", line 1296, in _socket_for_reads
    server = self._select_server(read_preference, session)
File "/home/appuser/venv/lib/python3.9/site-packages/pymongo/mongo_client.py", line 1257, in _select_server
    server = topology.select_server(server_selector)
File "/home/appuser/venv/lib/python3.9/site-packages/pymongo/topology.py", line 272, in select_server
    server = self._select_server(selector, server_selection_timeout, address)
File "/home/appuser/venv/lib/python3.9/site-packages/pymongo/topology.py", line 261, in _select_server
    servers = self.select_servers(selector, server_selection_timeout, address)
File "/home/appuser/venv/lib/python3.9/site-packages/pymongo/topology.py", line 223, in select_servers
    server_descriptions = self._select_servers_loop(selector, server_timeout, address)
File "/home/appuser/venv/lib/python3.9/site-packages/pymongo/topology.py", line 238, in _select_servers_loop
    raise ServerSelectionTimeoutError(

Steps to reproduce

Code snippet:
app.py

import streamlit as st
from streamlit_option_menu import option_menu
from streamlit_searchbox import st_searchbox

st.set_page_config(
    page_title="Edytor kart ustawien",
    page_icon=":hammer_and_wrench:",
    layout="wide"
)

import database as db
import edytor as ed
import uploader as up


# horizontal menu
selected_menu = option_menu(
    menu_title=None,
    options=["Edytor", "Upload", "Statystyki"],
    default_index=0,
    orientation="horizontal",
)
# columns
if selected_menu == "Edytor":
    st.title("Edytor")
    db.ping()

database.py

import streamlit as st

from pymongo import MongoClient
from pymongo.server_api import ServerApi

# import ObjectId from bson package (part of PyMongo distribution) to enable querying by ObjecyId
from bson.objectid import ObjectId


@st.cache_resource
def init_connection():
    return MongoClient("mongodb+srv://runcorx:"+ st.secrets.DB_PASS + "@cluster0.su8tngo.mongodb.net/?retryWrites=true&w=majority", server_api=ServerApi('1'))

# connect to mongodb cluster with MongoClient
client = init_connection()

# get reference to database
db = client.karty

# reference to collections
lista_narzedzi_db = db.lista_narzedzi

def ping():
    try:
        client.admin.command('ping')
        st.write("Pinged your deployment. You successfully connected to MongoDB!")
    except Exception as e:
        st.write(e)
    return ()

Expected behavior:

Localy it works fine

Actual behavior:

But in cloud:

I copied whole secrets.toml to app settings secrets.

Debug info

  • Streamlit version: 1.23.1
  • Python version: 3.11.4
  • Using Conda? PipEnv? PyEnv? Pex?: Nope
  • OS version: Microsoft Windows 10 Home 10.0.19045 Build 19045
  • Browser version: Google Chrome 114.0.5735.134

Requirements file

streamlit==1.23.1
streamlit-option-menu==0.3.6
streamlit-searchbox==0.1.3
openpyxl==3.1.2
python-dotenv==1.0.0
pymongo==4.3.3
pandas==2.0.2

Links

Please help.
I don’t really have any more ideas how to approach that problem.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.