[英]Can't connect to remote debug server with pydevd-pycharm
我有一个使用 docker 部署的 Django 项目。我想使用Python Remote Debug
调试该项目。 这是我如何根据https://www.jetbrains.com/help/pycharm/remote-debugging-with-product.html配置它
之后我启动了调试器,它说:
Use the following code to connect to the debugger:
import pydevd_pycharm
pydevd_pycharm.settrace('0.0.0.0', port=3000, stdoutToServer=True, stderrToServer=True)
Waiting for process connection...
之后我将代码复制到manage.py
中的__main__
顺便提一句。 将上面的代码放在某些views
中而不是 manage.py dint 帮助
接下来我用 docker 启动了docker-compose up -d proj
命令
过了一会儿,我从我的容器中看到日志说:
Could not connect to localhost: 3000
NoneType: None
Traceback (most recent call last):
File "/usr/local/lib/python3.6/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
File "/usr/local/lib/python3.6/site-packages/django/contrib/staticfiles/handlers.py", line 63, in __call__
return self.application(environ, start_response)
File "/usr/local/lib/python3.6/site-packages/sentry_sdk/integrations/django/__init__.py", line 93, in sentry_patched_wsgi_handler
environ, start_response
File "/usr/local/lib/python3.6/site-packages/sentry_sdk/integrations/wsgi.py", line 69, in __call__
rv = self.app(environ, start_response)
File "/usr/local/lib/python3.6/site-packages/sentry_sdk/integrations/django/__init__.py", line 92, in <lambda>
return SentryWsgiMiddleware(lambda *a, **kw: old_app(self, *a, **kw))(
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/wsgi.py", line 157, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.6/site-packages/sentry_sdk/integrations/django/__init__.py", line 112, in sentry_patched_get_response
return old_get_response(self, request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 124, in get_response
response = self._middleware_chain(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/app/xwing/middleware.py", line 21, in middleware
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/rest_framework/viewsets.py", line 116, in view
return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 492, in dispatch
response = handler(request, *args, **kwargs)
File "/app/cards/views.py", line 52, in version
return Response({'version': get_newest_version()})
File "/app/cards/queries.py", line 76, in get_newest_version
pydevd_pycharm.settrace('localhost', port=8080, stdoutToServer=True, stderrToServer=True)
File "/usr/local/lib/python3.6/site-packages/pydevd.py", line 1282, in settrace
stop_at_frame,
File "/usr/local/lib/python3.6/site-packages/pydevd.py", line 1327, in _locked_settrace
debugger.connect(host, port) # Note: connect can raise error.
File "/usr/local/lib/python3.6/site-packages/pydevd.py", line 364, in connect
s = start_client(host, port)
File "/usr/local/lib/python3.6/site-packages/_pydevd_bundle/pydevd_comm.py", line 568, in start_client
sys.exit(1) #TODO: is it safe?
SystemExit: 1
到目前为止,我尝试在 0.0.0.0:8000、localhost:8000 等不同端口上运行调试服务器。 但它没有帮助。 我拿了另一个项目确实需要 docker 才能工作,并且一切正常。 docker 似乎有问题。有什么想法吗? 我不知道为什么我不工作。
我从未做过,但是看起来'0.0.0.0'部分是运行Pycharm的计算机的地址。
您必须设置机器的IP。 可能也会成功以网络模式“主机”运行容器(因为0.0.0.0是指容器内部)
也许您发现也有用:
不确定它是否会对任何人有所帮助,但就我而言,事实证明我忘记了 mac OS 上的 docker 使用 host.docker.internal。
所以我设置:
pydevd_pycharm.settrace('host.docker.internal', port=YOUR_PORT, stdoutToServer=True, stderrToServer=True)
然后单击编辑配置 => python 调试服务器:
host : host.docker.internal
port YOUR_PORT
不要忘记路径映射,(访问您的 docker 并查看在哪里可以找到与根目录完全相同的文件夹,并且不要忘记放置根目录的绝对路径,在我的例子中是这样的 /Users/UserName /Repo/Your_root= /app/src)
它奏效了!
事实证明,端口可以是任何东西,只要它不与现有端口冲突(注意,编辑配置和 settrace 中的端口必须匹配)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.