Google App Engine dev_appserver.py: флаг watcher_ignore_re "не поддерживает сериализацию в формате JSON" - PullRequest
0 голосов
/ 06 июня 2018

Почему я запускаю dev_appserver.py с параметром watcher_ignore_re, я получаю сообщение об ошибке, что регулярное выражение is not JSON serializable.

Это ошибка с сервером разработки?Я неправильно использую эту команду?Команда и стек вызовов напечатаны ниже.

C:\Users\mes65\Documents\MyProject>"C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin\dev_appserver.py" ^
    --watcher_ignore_re="(.*\.git|.*\.idea|tmp\.py)" ^
    "C:\Users\mes65\Documents\MyProject"
WARNING  2018-06-06 09:28:59,161 appinfo.py:1622] lxml version "2.3" is deprecated, use one of: "3.7.3"
INFO     2018-06-06 09:28:59,187 devappserver2.py:120] Skipping SDK update check.
Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\dev_appserver.py", line 96, in <module>
    _run_file(__file__, globals())
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\dev_appserver.py", line 90, in _run_file
    execfile(_PATHS.script_file(script_name), globals_)
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\devappserver2.py", line 454, in <module>
    main()
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\devappserver2.py", line 442, in main
    dev_server.start(options)
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\devappserver2.py", line 163, in start
    bool(ssl_certificate_paths), options)
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\metrics.py", line 166, in Start
    self._cmd_args = json.dumps(vars(cmd_args)) if cmd_args else None
  File "C:\Python27\lib\json\__init__.py", line 244, in dumps
    return _default_encoder.encode(obj)
  File "C:\Python27\lib\json\encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Python27\lib\json\encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
  File "C:\Python27\lib\json\encoder.py", line 184, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <_sre.SRE_Pattern object at 0x00000000063C2188> is not JSON serializable

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Я также столкнулся с этой проблемой юзабилити в Windows и был очень разочарован.Я попытался найти некоторые обходные пути, но я не нашел подходящего пути.

В конце концов, я решил сделать собственную реализацию поддержки watcher_ignore_re для Windows.Я внес необходимые изменения в моего репозитория Github

Если опишу их несколькими словами:

  1. Добавьте _watcher_ignore_re, _skip_files_re свойства и его установщики
  2. Добавить оператор импорта from google.appengine.tools.devappserver2 import watcher_common и использовать его во вновь созданном def _path_ginored
  3. Фильтр additional_changes перед добавлением их в измененные файлы наблюдателя

Для решения указанной проблемы сне сериализуемый атрибут регулярного выражения, мы должны удалить их из сериализованного словаря.Исправление для этого добавлено в качестве последующего коммита и может быть проверено в metrics.py:185-193.

Я надеюсь, что это поможет другим ребятам с удовольствием работать над GAE для Windows:)

0 голосов
/ 08 сентября 2018

Похоже, что это проблема с кодом аналитики Google, встроенным в dev_appserver2 (google-cloud-sdk \ platform \ google_appengine \ google \ appengine \ tools \ devappserver2 \ devappserver2.py в строке 316 или около нее).Он хочет отправить все параметры командной строки в Google Analytics.Если вы удалите идентификатор клиента аналитики, добавив параметр командной строки --google_analytics_client_id = (note: '=' без какого-либо следующего значения), appserver не будет вызывать код Google Analytics, где он пытается JSON сериализовать объект SRE и в случае сбоя,Тем не менее, поскольку вы работаете в Windows, я обнаружил, что --watcher_ignore_re все равно не работает, даже когда вы преодолеете эту проблему.

В file_watcher.py

есть комментарий: TODO: b /33178251 - Добавлена ​​поддержка watcher_ignore_re для Windows.

...