【问题标题】:Google App Engine dev_appserver.py: watcher_ignore_re flag "is not JSON serializable"Google App Engine dev_appserver.py:watcher_ignore_re 标志“不是 JSON 可序列化的”
【发布时间】:2018-11-16 05:27:27
【问题描述】:

为什么我使用选项watcher_ignore_re 运行dev_appserver.py,我收到一条错误消息,即正则表达式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

【问题讨论】:

  • FWIW,在 linux 上传递相同的 --watcher_ignore_re="(.*\.git|.*\.idea|tmp\.py)" 参数就可以了。可能是特定于 Windows 的问题。如果您还没有这样做,请检查您的报价。删除或修改您的 args,包括 watcher_ignore_re 以查看您是否隔离了哪个 arg 片段正是令人不安的片段。
  • @DanCornilescu,您能否扩展您在评论中解释的内容并将其作为答案发布?谢谢。
  • Mac 上的 `--watcher_ignore_re '.*/frontend/.*'` 也会发生同样的事情。 SDK 版本 204.0.0。这是一个新问题,在我使用之前版本的 SDK 时它运行良好。
  • 我恢复到 SDK 版本 200.0.0 并且问题已修复。

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


【解决方案1】:

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

file_watcher.py 中有注释

TODO: b/33178251 - 添加对 windows 的 watcher_ignore_re 支持。

【讨论】:

    【解决方案2】:

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

    最后,我决定为 Windows 制作自己的 support 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 添加到观察者更改文件之前过滤它们

    为了解决上面提到的不可序列化正则表达式属性的问题,我们应该将它们从序列化字典中删除。对此的修复作为后续提交添加,可以在metrics.py:185-193 进行检查。

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

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 2010-12-04
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 2012-07-31
      • 2019-05-17
      相关资源
      最近更新 更多