작성
·
481
·
수정됨
0
로그인, 글쓰기 모두 이상 없는데... list 클릭 시 하기처럼 Error 가 발생합니다
OS는 윈도우10 Mongodb 4.2.22 입니다
__call__
def __call__(self, environ: dict, start_response: t.Callable) -> t.Any:
"""The WSGI server calls the Flask application object as the
WSGI application. This calls :meth:`wsgi_app`, which can be
wrapped to apply middleware.
"""
return self.wsgi_app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
파일 "D:\PM_WebService\venv\Lib\site-packages\flask\app.py", 2531 행, 안으로 wsgi_app
try:
ctx.push()
response = self.full_dispatch_request()
except Exception as e:
error = e
response = self.handle_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^
except: # noqa: B001
error = sys.exc_info()[1]
raise
return response(environ, start_response)
finally:
파일 "D:\PM_WebService\venv\Lib\site-packages\flask\app.py", 2528 행, 안으로 wsgi_app
ctx = self.request_context(environ)
error: t.Optional[BaseException] = None
try:
try:
ctx.push()
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
except Exception as e:
error = e
response = self.handle_exception(e)
except: # noqa: B001
error = sys.exc_info()[1]
파일 "D:\PM_WebService\venv\Lib\site-packages\flask\app.py", 1825 행, 안으로 full_dispatch_request
request_started.send(self)
rv = self.preprocess_request()
if rv is None:
rv = self.dispatch_request()
except Exception as e:
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
return self.finalize_request(rv)
def finalize_request(
self,
rv: t.Union[ft.ResponseReturnValue, HTTPException],
파일 "D:\PM_WebService\venv\Lib\site-packages\flask\app.py", 1823 행, 안으로 full_dispatch_request
try:
request_started.send(self)
rv = self.preprocess_request()
if rv is None:
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
except Exception as e:
rv = self.handle_user_exception(e)
return self.finalize_request(rv)
def finalize_request(
파일 "D:\PM_WebService\venv\Lib\site-packages\flask\app.py", 1799 행, 안으로 dispatch_request
and req.method == "OPTIONS"
):
return self.make_default_options_response()
# otherwise dispatch to the handler for that endpoint
view_args: t.Dict[str, t.Any] = req.view_args # type: ignore[assignment]
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def full_dispatch_request(self) -> Response:
"""Dispatches the request and on top of that performs request
pre and postprocessing as well as HTTP exception catching and
error handling.
파일 "D:\PM_WebService\run.py", 137 행, 안으로 lists
query = {"$or": search_list}
board = mongo.db.board
datas = board.find(query).skip((page-1) * limit).limit(limit)
tot_count = board.find(query).count()
^^^^^^^^^^^^^^^^^^^^^^^
last_page_num = math.ceil(tot_count / limit)
block_size = 5
block_num = int((page-1) / block_size)
block_start = int((block_size * block_num) + 1)
답변 8
0
0
네, 답답하신 심정 이해갑니다만 현재 강의는 몽고디비 4.x 버전을 기준으로 하지 않습니다. 그래서 되도록 강의 환경과 동일한 환경을 구축하시는걸 강의 초반에 당부드리는 이유기도 합니다. 참고로 몽고디비는 3.9 버전을 기점으로 상당히 많은 내용과 개념이 변경되었습니다.
버전업에는 단순히 어떤 함수명이 변경되는 수준이 아니라 개념 자체가 바뀌는 경우도 많습니다. 그래서 실제 서비스를 운영할때도 프로그램이 버전업 되었다고해서 실제 서비스 중인 프로그램을 절대 쉽게 업그레이드 하지 않습니다. 이런 버전업은 단순히 스마트폰의 펌웨어를 최신버전으로 업그레이드 하는 관점과는 완전 다른 부분입니다. 그러기에 그 모든 버전에 따라 강의 내용을 수정할 수가 없는 부분도 있습니다.
지금 사용중이신 버전에서 단순히 count()함수를 count_documents()로 변경해서 되는 부분이 있고 안되는 부분도 많습니다만 그리고 지금 올려주신
pymongo.errors.ServerSelectionTimeoutError: mongo:27017: [Errno 11001] getaddrinfo failed, Timeout: 30s, T
위 오류의 내용은 count()함수와 count_documents()함수로 인해 발생하는 문제가 아니라 몽고디비 서버가 반응하지 않아 타임아웃이 발생한 오류로 보입니다. getaddrinfo함수가 failed 되었다는 이야기는 이는 서버가 동작하지 않아서 생기는 문제일수도 있고 접속 URI 문자열의 주소 혹은 포트로 접속할 수 없어서 생기는 문제입니다. 물론 안타깝게도 왜 그런 문제가 생겼는지는 제가 환경까지 알 수 없기 때문에 뭐라고 답변을 드릴 수가 없습니다.
이제 공부를 시작하시는 입장에선 모든 오류가 다 답답하고 힘드시겠지만 최대한 강의와 동일한 환경에서 자세한 정보를 주셔야 제가 답변을 해드릴 수 있습니다. 물론 프로그래밍은 수학 문제가 아니기 때문에 문제에 정답을 드릴 수 없을 때가 많습니다.
저로서는 충분히 생각해보고 어떤 가능성에 대한 방향을 제시해 드리지만 때로 제가 드린 답변으로 해결 되지 않을 수도 있습니다.
0
아래 3개 모두 count()를 count_documents() 로 변경했는데도 안됩니다.
tot_count = board.find(query).count_documents()
-list.html
% if datas.count_documents() > 0 %}
-member
.pycnt = members.count_documents({"email": email})
* Restarting with stat
* Debugger is active!
* Debugger PIN: 931-800-023
127.0.0.1 - - [23/Mar/2023 18:52:27] "POST /member/join HTTP/1.1" 500 -
Traceback (most recent call last):
File "D:\PM_WebService\venv\Lib\site-packages\flask\app.py", line 2551, in call
return self.wsgi_app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PM_WebService\venv\Lib\site-packages\flask\app.py", line 2531, in wsgi_app
response = self.handle_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PM_WebService\venv\Lib\site-packages\flask\app.py", line 2528, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PM_WebService\venv\Lib\site-packages\flask\app.py", line 1825, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PM_WebService\venv\Lib\site-packages\flask\app.py", line 1823, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PM_WebService\venv\Lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PM_WebService\main\member.py", line 24, in member_join
cnt = members.count_documents({"email": email})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PM_WebService\venv\Lib\site-packages\pymongo\collection.py", line 1842, in count_documents
return self._retryable_non_cursor_read(_cmd, session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PM_WebService\venv\Lib\site-packages\pymongo\collection.py", line 1847, in retryablenon_cursor_read
with client._tmp_session(session) as s:
File "C:\Program Files\Python311\Lib\contextlib.py", line 137, in enter
return next(self.gen)
^^^^^^^^^^^^^^
File "D:\PM_WebService\venv\Lib\site-packages\pymongo\mongo_client.py", line 1757, in tmpsession
s = self._ensure_session(session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PM_WebService\venv\Lib\site-packages\pymongo\mongo_client.py", line 1740, in ensuresession
return self.__start_session(True, causal_consistency=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PM_WebService\venv\Lib\site-packages\pymongo\mongo_client.py", line 1685, in __start_session
self._topology._check_implicit_session_support()
File "D:\PM_WebService\venv\Lib\site-packages\pymongo\topology.py", line 538, in checkimplicit_session_support
self._check_session_support()
File "D:\PM_WebService\venv\Lib\site-packages\pymongo\topology.py", line 554, in checksession_support
self._select_servers_loop(
File "D:\PM_WebService\venv\Lib\site-packages\pymongo\topology.py", line 238, in selectservers_loop
raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: mongo:27017: [Errno 11001] getaddrinfo failed, Timeout: 30s, Topology Description: <TopologyDescription id: 641c213a2c8965dc7b56a160, topology_type: Unknown, servers: [<ServerDescription ('mongo', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('mongo:27017: [Errno 11001] getaddrinfo failed')>]>
127.0.0.1 - - [23/Mar/2023 18:52:28] "GET /member/join?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 304 -
127.0.0.1 - - [23/Mar/2023 18:52:29] "GET /member/join?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1" 304 -
127.0.0.1 - - [23/Mar/2023 18:52:29] "GET /member/join?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 304 -
127.0.0.1 - - [23/Mar/2023 18:52:30] "GET /member/join?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 304 -
0
0
0
상위 버전에서 변경된 부분은 최근에 수강자들에게 공지를 해줘야 하는 것 아닌가요? 소스를 어디를 변경해야 한다던지 아니면 변경된 소스를 수정해서 업로드 하던지
0
0
tot_count = board.find(query).count()
위 문제는 이전에 질문하셨던 내용과 동일한 내용입니다. 몽고디비 상위 버전에서 위의 코드에서처럼 count() 함수가 변경되어 발생하는 오류로 보입니다. 이전 답변에서처럼 count()함수 대신 count_documents()함수를 사용해보시길 바라며, 사용중이신 해당 버전에 대한 공식 문서를 참고하셔서 콜렉션 카운팅에 대한 내용을 확인해보시길 바랍니다.
몽고DB 4.2.2 를 사용중이시면 그건 그냥 둬보시고, pymongo 를 강의 버전에서 사용한 3.9.0 버전으로 설치해보시는것도 방법이 되지 않을까 합니다. 작성자님의 환경을 최대한 비슷하게 구현해서 테스트 했을때 몽고DB 4.2.2 + pymongo 3.9.0에서 문제 없이 구동 되는 것까지는 제가 확인했습니다.ongo==3.9.0
기존 pymongo를 제거한 후 위 버전을 설치해보시고, 제가 테스트를 해보긴 했으나 환경이 100% 일치한다는 장담은 할 수 없으니 문제가 발생하면 다시 질문 주시기 바랍니다. 아니면 디스코드 아이디 남박사#4445 로 문의주시기 바랍니다.