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

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

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

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

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

Скриншот с предупреждением

Любые мысли о том, что я делаю неправильно?

I've:

  • Включен API отладчика Stackdriver (как указано здесь)
  • Импортирован и инициализирован отладчик (следуя инструкциям здесь)
  • Включенный google-python-cloud-debugger в файле requirements.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()

to

googleclouddebugger.enable()

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


person user7021235    schedule 23.12.2017    source источник
comment
Не могли бы вы предоставить содержимое вашего файла requirements.txt?   -  person Katie Sinatra    schedule 25.01.2018


Ответы (1)


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

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

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

2017-12-24 15:14:14.000 PST I1224 23:14:14.600462 12 gcp_hub_client.py:335] Debuggee registered successfully, ID: gcp:1025611681465:7144dac417e43025

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

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

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

...
except ImportError as e:
  print 'Failed to import Google Cloud Debugger: %s' % str(e)
  pass

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

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

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

person Emre Kultursay    schedule 24.12.2017
comment
Большое спасибо, что нашли время написать это. Я добавил оператор печати в ImportError, и вот сообщение: Не удалось импортировать Google Cloud Debugger: невозможно импортировать имя urllib. Таким образом, несмотря на то, что облачный отладчик включен в файл requirements.txt, похоже, что urllib не установлен. Я собираюсь добавить его в файл requirements.txt и посмотреть, что произойдет. - person user7021235; 25.12.2017
comment
Был ли этот обходной путь успешным? На скриншоте у вас есть запрос узнать больше. Куда это указывает? - person Tudormi; 09.02.2018