我正在使用适用于Google App Engine的Go SDK(它使用Python SDK的某些部分,并在运行dev_appserver.py
时调用goapp serve
)。默认情况下,它似乎会观察所有文件和文件夹以进行更改。我在静态文件夹中有一堆bower依赖项,SDK抱怨它无法看到那么多文件。
如何设置开发服务器以忽略文件夹中的更改?
修改即可。阅读devappserver2/watcher_common.py
,它似乎忽略了以.
开头的目录。我想在最糟糕的情况下,我可以在文件夹前加.
,但这是一个黑客攻击。应该有一个配置选项,我似乎无法找到它。
答案 0 :(得分:2)
您是正确的,目前没有命令行或配置选项来指定观察者忽略的文件/目录。
正如您所发现的那样,忽略以.
开头的文件和目录。对于许多* nix系统来说,这是一个相当标准的约定。但是,对于具有许多本地依赖性的python项目,它并不是真正可扩展的。
您可以修改此文件,但这也是不利的,因为它会导致非常脆弱的更改,并且如果更新覆盖文件,则容易破坏。
除了上述解决方法之外,没有办法实现这一目标。我还没有看到在App Engine release notes中提及这一点。但是,公共问题跟踪器上有一个open feature request,让观察者忽略skip_files
yaml指令指定的文件。请随意为该问题加注,以了解其进展情况。
对于遇到此限制的NPM用户,您可能会发现使用NPM v3 resolves dependencies differently很有帮助。
npm3通过以平面方式安装一些辅助依赖项(依赖项的依赖项),在与需要它的主要依赖项相同的目录中,尝试这种[缓解深度树和冗余]。
这对于遇到文件监视限制的Node用户非常有效。
Khan Academy开发了一个名为Frankenserver的App Engine devserver的分支。虽然我自己没有探索过这个选项,但似乎有相当多的支持和最近的更新。从它的自述文件:
frankenserver相对于vanilla SDK的最大优势在于它如何监视应用中的文件以进行更改。它通过以下方式更有效地实现:1)在Mac OS X上使用基于FSEvents的本机文件监视器,2)尊重app.yaml中的skip_files指令。
虽然这不是谷歌的官方解决方案,但如果这种限制严重影响您,那么暂时可能是值得的解决方法。
答案 1 :(得分:2)
使用:
Google Cloud SDK 197.0.0
app-engine-python 1.9.68
app-engine-python-extras 1.9.63
bq 2.0.31
core 2018.04.06
gsutil 4.30
从App Engine Docs,您可以在从命令行运行时将参数--watcher_ignore_re
传递给dev_appserver.py
。
示例强>
dev_appserver.py app.yaml --watcher_ignore_re="(.*\.data|.*\.vscode)"
这将忽略.data
和.vscode
目录相对于运行命令的目录( CWD )的更改。
使用:
Google Cloud SDK 204.0.0
app-engine-python 1.9.70
app-engine-python-extras 1.9.69
bq 2.0.34
core 2018.06.04
gsutil 4.31
watcher_ignore_re
似乎不再有用了。
相反,对我有用的是在文档中按照here所述的skip_files
文件中添加app.yaml
指令。 dev_appserver.py
命令将遵循本节中的定义。
示例强>
项目内app.yaml
:
...
...
skip_files:
# default from GAE
- ^(.*/)?#.*#$
- ^(.*/)?.*~$
- ^(.*/)?.*\.py[co]$
- ^(.*/)?.*/RCS/.*$
- ^(.*/)?\..*$
# custom entries
# dev-related files
- ptvsd
- pydev_startup.py
- .pylintrc
- .data
- .vscode
# version control files
- .git
- .gitignore
- .gitattributes
# non-application files
- README.md
- ^(.*/)?.*\.mwb(.bak)?$ # workbench models
现在,使用命令运行项目:
dev_appserver.py app.yaml
答案 2 :(得分:0)
我发现comment37中的Issue 9300
适用于我。
如果该链接不再可访问。这是评论37:
理论上这个代码现在存在,但是有一个bug。它确实使用了 skip_files指令,但不是匹配相对路径, 它使用绝对路径。
所以,如果我有:
skip_files:
- ^ node_modules(/.*)?
它会尝试匹配 / Users / myuser / Projects / myproject / node_modules /并失败。
添加其他条目应该修复它,让它跳过你的 node_modules目录:
skip_files:
- ^ node_modules(/.*)?
- 。* node_modules
这是我现在使用的黑客解决方法,至少可以让我使用 不需要进入和编辑gcloud文件的便利性 直接每次重新发布!
最重要的部分:
skip_files:
- ^node_modules(/.*)?
- .*node_modules