"Отладчик 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 ответ
Я не вижу ничего плохого в этой конфигурации, но вот несколько советов:
Открыв страницу отладки консоли GCP, убедитесь, что вы выбрали правильную версию приложения в верхнем раскрывающемся меню, прежде чем начинать сеанс отладки. Это может указывать на старую версию приложения, которая не может быть отлажена, или на страницу и раскрывающийся список может потребоваться обновление для отображения последней версии.
Точно так же, пожалуйста, проверьте, если ваш 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
Это означает, что на самом деле отладчик настроен / работает должным образом, и, скорее всего, указывает, что пользовательский интерфейс требует обновления или выбора правильной версии приложения из раскрывающегося списка.
Убедитесь, что у вас есть
google-python-cloud-debugger
вrequirements.txt
файл.Рассмотрите возможность добавления простого
print
заявление вtry
/except
Блок для отладчика, как показано ниже:
... кроме ImportError как e: print 'Не удалось импортировать Google Cloud Debugger: %s' % str(e) проходить
Затем проверьте stderr
регистрируется в журнале Stackdriver, чтобы увидеть, печатает ли это какие-либо исключения.
Я не знаю о werkzeug, но вы можете попробовать отключить отладчик по умолчанию, передав
use_debugger=False
Просто, чтобы избежать возможных конфликтов.Попробуйте развернуть более простое приложение для фляги (например, начните с Hello World для Flex здесь, но измените его, чтобы использовать
python_version: 2
) и посмотрите, работает ли у вас отладчик.