Я - опытный программист, но Python, Ubuntu и новичок Linux. Я приношу извинения, также, если этот вопрос был бы лучше на другом форуме.
Я работаю над проектом в использовании Python PyCharm с кодом, выполняющимся в среде Ubuntu в Бродяге. Это должно получить доступ к базе данных MongoDb.
Когда база данных локальна, я не испытываю затруднений. Я также могу соединиться с одной удаленной базой данных. Однако база данных, с которой я больше всего хочу соединиться, является частью набора копии, и это, кажется, проблема.
(Я должен сказать, что база данных с набором копии работает очень хорошо в его фактической роли. Я, кажется, тот с проблемой.)
Мы настраиваем некоторых ssh
туннели, с помощью этих предложений:
Соединение с Набором Копии монго через SSH
Мы настраиваем hosts
и ifconfig
соответственно.
Мой супервизор может теперь соединиться с минимальной трудностью. Я, однако, продолжаю получать это сообщение:
pymongo.errors.ServerSelectionTimeoutError: No replica set members available for replica set name "abc"
Информация о соединении включает все 3 сервера набора копии как часть host
строка, плюс указываемое имя набора копии и ReadPreference.PRIMARY
.
Дорожка стека похожа на это:
File "/usr/local/src/dashboard/dashboard/dashboard/app/tasks/exports/__init__.py", line 95, in get_sections
sections = CourseSection.objects(**params)
File "/apps/dashboard-env/lib/python3.4/site-packages/mongoengine/queryset/manager.py", line 37, in __get__
queryset = queryset_class(owner, owner._get_collection())
File "/apps/dashboard-env/lib/python3.4/site-packages/mongoengine/document.py", line 198, in _get_collection
cls.ensure_indexes()
File "/apps/dashboard-env/lib/python3.4/site-packages/mongoengine/document.py", line 878, in ensure_indexes
collection.create_index(fields, background=background, **opts)
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/collection.py", line 1753, in create_index
self.__create_index(keys, kwargs, session, **cmd_options)
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/collection.py", line 1641, in __create_index
with self._socket_for_writes() as sock_info:
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/collection.py", line 193, in _socket_for_writes
return self.__database.client._socket_for_writes()
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/mongo_client.py", line 965, in _socket_for_writes
server = self._get_topology().select_server(writable_server_selector)
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/topology.py", line 224, in select_server
address))
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/topology.py", line 183, in select_servers
selector, server_timeout, address)
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/topology.py", line 199, in _select_servers_loop
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: No replica set members available for replica set name "abc"
Определенное сообщение No replica set members available for replica set name "abc"
кажется, является относительно редким, поскольку я не нашел хитов на Google для проблем с определенным именованным набором копии.
Любые предложения очень ценились бы.
Я решил свою собственную проблему.
Оказывается, что, для изменения, против какой базы данных я выполняю код, я должен сделать следующее:
ssh
сессии на Бродяге, для закрытия любых существующих туннелей.mongod
сервис: service mongod stop
ssh
команда на Бродяге для создания желаемого туннеля. При соединении локально, ничего не сделайте.mongod
: service mongod start
И теперь мой код соединится без ошибок.
Может случиться так, что существует лучший способ достигнуть этого, но это позволяет мне делать то, что я хотел сделать.