Отладка Docker Контейнер с кодом Visual Studio - PullRequest
0 голосов
/ 25 марта 2020

У меня есть Django проект в коде Visual Studio. Я запускаю его через виртуальную машину (linux), используя Docker. Я хочу иметь возможность отладки проекта путем добавления точек останова.

Я пытался следовать этому руководству, но не могу его получить: https://code.visualstudio.com/docs/containers/debug-python

Приложение запускается в "localhost: 8000" частный IP-адрес физической машины - 192.168.0.102, а виртуальной машины - 192.168.56.1.

Запуск моего файла. json:

{
"name": "Python: Remote Attach",
"type": "python",
"request": "attach",
"port": 5678,
"host": "192.168.56.1",
"pathMappings": [
    {
    "localRoot": "${workspaceFolder}",
    "remoteRoot": "/code"
    }
  ]
}

Мои views.py:

    # -*- coding: utf-8 -*-
    import tempfile, time
    import json
    import ptvsd
    ptvsd.enable_attach(address=('192.168.56.1', 5678))  #This is ok?
    ptvsd.wait_for_attach()
    ...

Ошибка:

csuperior-web | Performing system checks...
csuperior-web | 
csuperior-web | Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f4742165b70>
csuperior-web | Traceback (most recent call last):
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/utils/autoreload.py", line 228, in wrapper
csuperior-web |     fn(*args, **kwargs)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 125, in inner_run
csuperior-web |     self.check(display_num_errors=True)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 359, in check
csuperior-web |     include_deployment_checks=include_deployment_checks,
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 346, in _run_checks
csuperior-web |     return checks.run_checks(**kwargs)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/core/checks/registry.py", line 81, in run_checks
csuperior-web |     new_errors = check(app_configs=app_configs)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/core/checks/urls.py", line 16, in check_url_config
csuperior-web |     return check_resolver(resolver)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/core/checks/urls.py", line 26, in check_resolver
csuperior-web |     return check_method()
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 254, in check
csuperior-web |     for pattern in self.url_patterns:
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py", line 35, in __get__
csuperior-web |     res = instance.__dict__[self.name] = self.func(instance)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 405, in url_patterns
csuperior-web |     patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py", line 35, in __get__
csuperior-web |     res = instance.__dict__[self.name] = self.func(instance)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 398, in urlconf_module
csuperior-web |     return import_module(self.urlconf_name)
csuperior-web |   File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
csuperior-web |     return _bootstrap._gcd_import(name[level:], package, level)
csuperior-web |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
csuperior-web |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
csuperior-web |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
csuperior-web |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
csuperior-web |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
csuperior-web |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
csuperior-web |   File "/code/ConsejoSuperior/urls.py", line 28, in <module>
csuperior-web |     url(r'^reunion/', include('reunion.urls', namespace='reunion')),
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/django/conf/urls/__init__.py", line 50, in include
csuperior-web |     urlconf_module = import_module(urlconf_module)
csuperior-web |   File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
csuperior-web |     return _bootstrap._gcd_import(name[level:], package, level)
csuperior-web |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
csuperior-web |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
csuperior-web |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
csuperior-web |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
csuperior-web |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
csuperior-web |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
csuperior-web |   File "/code/reunion/urls.py", line 4, in <module>
csuperior-web |     from reunion.views import generar_temario_pdf, generar_convocatoria_pdf, \
csuperior-web |   File "/code/reunion/views.py", line 5, in <module>
csuperior-web |     ptvsd.enable_attach(address=('192.168.56.1', 5678))
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/ptvsd/attach_server.py", line 101, in enable_attach
csuperior-web |     ptvsd_enable_attach(address)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/ptvsd/_remote.py", line 64, in enable_attach
csuperior-web |     **kwargs)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/ptvsd/pydevd_hooks.py", line 128, in install
csuperior-web |     daemon = Daemon(**kwargs)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/ptvsd/daemon.py", line 503, in __init__
csuperior-web |     super(Daemon, self).__init__(wait_for_user, **kwargs)
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/ptvsd/daemon.py", line 100, in __init__
csuperior-web |     self._install_exit_handlers()
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/ptvsd/daemon.py", line 425, in _install_exit_handlers
csuperior-web |     self._exithandlers.install()
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/ptvsd/exit_handlers.py", line 62, in install
csuperior-web |     self._install_signal_handler()
csuperior-web |   File "/usr/local/lib/python3.6/site-packages/ptvsd/exit_handlers.py", line 103, in _install_signal_handler
csuperior-web |     orig[sig] = signal.signal(sig, self._signal_handler)
csuperior-web |   File "/usr/local/lib/python3.6/signal.py", line 47, in signal
csuperior-web |     handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
csuperior-web | ValueError: signal only works in main thread

Спасибо!

...