Google App Engine dev_appserver.py:watcher_ignore_re标志“不是JSON可序列化的”

时间:2018-06-06 13:36:08

标签: python google-app-engine development-environment

为什么我使用选项dev_appserver.py运行watcher_ignore_re,收到正则表达式is not JSON serializable的错误消息。

这是开发服务器的错误吗?我不正确地使用这个命令吗?命令和callstack打印在下面。

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 :(得分:3)

似乎是dev_appserver2中内置的Google Analytics(分析)代码存在问题(在第316行或附近的google-cloud-sdk \ platform \ google_appengine \ google \ appengine \ tools \ devappserver2 \ devappserver2.py)。它希望将所有命令行选项发送到Google Analytics(分析)。如果您通过添加命令行选项--google_analytics_client_id =(请注意:'=',不带任何以下值)来删除Analytics(分析)客户端ID,则应用服务器将不会在尝试对JSON序列化SRE对象并失败的地方调用Google Analytics(分析)代码。但是,由于您使用的是Windows,因此即使您克服了这个问题,我仍然发现--watcher_ignore_re无法正常工作。

file_watcher.py中有一条注释

待办事项:b / 33178251-为Windows添加watcher_ignore_re支持。

答案 1 :(得分:1)

我在Windows上也遇到了这个可用性问题,真的很失望。我试图找到一些解决方法,但没有找到任何合适的方法。

最后,我决定对Windows进行自己的支持watcher_ignore_re实现。我在my Github repo

中进行了必要的更改

如果用几个字形容他们:

  1. 添加_watcher_ignore_re_skip_files_re属性及其设置器
  2. 添加导入语句from google.appengine.tools.devappserver2 import watcher_common,并将其用于新创建的def _path_ginored
  3. 过滤additional_changes,然后将其添加到观察者更改的文件中

为解决提到的无法序列化regex属性的问题,我们应将其从序列化字典中删除。对此问题的修复是作为后续提交添加的,可以在metrics.py:185-193处进行检查。

我希望它可以帮助其他人在Windows上使用GAE进行开发:)