"Отладчик Stackdriver не настроен для среды исполнения Python в GAE Flex" Предупреждение

Я пытаюсь отладить приложение Flask/Python, работающее в гибкой среде Google Appengine.

Однако в интерфейсе отладки Stackdriver в консоли Google отображается предупреждающее сообщение, и я не могу установить какие-либо контрольные точки.

Предупреждение гласит:

Stackdriver Debugger не настроен для среды исполнения Python в GAE Flex

Снимок экрана с предупреждением

Есть мысли о том, что я делаю не так?

Я:

  • Включен API-интерфейс отладчика Stackdriver (как упомянуто здесь)
  • Импортировал и инициализировал отладчик (следуя инструкциям здесь)
  • Включен google-python-cloud-debugger в файл require.txt

main.py (точка входа в приложение, определенная в app.yaml)

from werkzeug.serving import run_simple
from werkzeug.wsgi import DispatcherMiddleware

from wsgi import api, frontend, manage

try:
    import googleclouddebugger
    googleclouddebugger.AttachDebugger()
except ImportError:
    pass

app = DispatcherMiddleware(frontend.create_app(), {
    '/api': api.create_app(),
    '/manage': manage.create_app()
})

if __name__ == '__main__':
    run_simple('0.0.0.0', 5000, app, use_reloader=True, use_debugger=True)

app.yaml

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 2

manual_scaling:
  instances: 1

resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

env_variables:
  SQLALCHEMY_DATABASE_URI: "postgresql+psycopg2://myusername:mypassword!@/instancename?host=/cloudsql/instancename"

beta_settings:
  cloud_sql_instances: "instancename"

Обновление 1

После комментария и замечая ошибку импорта urllib, я подумал, что природа моего приложения wsgi вызывает проблемы. Я вернулся к документации, увидел заметку о том, что фреймворк Django делает нечто подобное, и изменил следующее:

googleclouddebugger.AttachDebugger()

в

googleclouddebugger.enable()

Это избавило от ошибки импорта urllib, но не решило общую проблему.

1 ответ

Я не вижу ничего плохого в этой конфигурации, но вот несколько советов:

  1. Открыв страницу отладки консоли GCP, убедитесь, что вы выбрали правильную версию приложения в верхнем раскрывающемся меню, прежде чем начинать сеанс отладки. Это может указывать на старую версию приложения, которая не может быть отлажена, или на страницу и раскрывающийся список может потребоваться обновление для отображения последней версии.

  2. Точно так же, пожалуйста, проверьте, если ваш Stackdriver stderr logs содержит строку, которая выглядит так:

2017-12-24 15: 14: 14.000 PST I1224 23: 14: 14.600462 12 gcp_hub_client.py:335] Отладчик успешно зарегистрирован, ID: gcp:1025611681465:7144dac417e43025

Это означает, что на самом деле отладчик настроен / работает должным образом, и, скорее всего, указывает, что пользовательский интерфейс требует обновления или выбора правильной версии приложения из раскрывающегося списка.

  1. Убедитесь, что у вас есть google-python-cloud-debugger в requirements.txt файл.

  2. Рассмотрите возможность добавления простого print заявление в try/except Блок для отладчика, как показано ниже:

...
кроме ImportError как e:
  print 'Не удалось импортировать Google Cloud Debugger: %s' % str(e)
  проходить

Затем проверьте stderr регистрируется в журнале Stackdriver, чтобы увидеть, печатает ли это какие-либо исключения.

  1. Я не знаю о werkzeug, но вы можете попробовать отключить отладчик по умолчанию, передав use_debugger=FalseПросто, чтобы избежать возможных конфликтов.

  2. Попробуйте развернуть более простое приложение для фляги (например, начните с Hello World для Flex здесь, но измените его, чтобы использовать python_version: 2) и посмотрите, работает ли у вас отладчик.