代码之家  ›  专栏  ›  技术社区  ›  speedplane

google app engine dev_appserver.py:watcher_ignore_re flag“不是json可序列化的”

  •  3
  • speedplane  · 技术社区  · 6 年前

    为什么我要经营 dev_appserver.py 有选择权 watcher_ignore_re ,我得到一条错误消息,regex 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 回复  |  直到 6 年前
        1
  •  1
  •   Pavlo Zhukov    6 年前

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

    最后,我决定自己实现windows支持观察程序ignore。我在 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的乐趣:)

        2
  •  3
  •   akwebb1    6 年前

    看起来这是内置在dev_appserver2(第316行或附近的google cloud sdk\platform\google_appengine\google\appengine\tools\devappserver2\devappserver2.py)中的google分析代码的问题。它想把你所有的命令行选项发送到谷歌分析。如果通过添加命令行选项google_analytics_client_id=(注意:“=”,不带任何以下值)删除分析客户端id,则appserver不会调用google analytics代码,因为它正在尝试json序列化sre对象,但失败。但是,由于您使用的是Windows,我发现即使您解决了这个问题,--watcher_ignore_re也不起作用。

    file_watcher.py中有注释

    待办事项:B/33178251-添加监视程序忽略对Windows的重新支持。