dev_appserver.py 起動時に、ファイルが多すぎる旨の UserWarning が出る場合の対処法【追記あり】

2018年7月12日 21:12

dev_appserver.py というのは、GAE(Google App Engine)のローカル開発用サーバーを起動するためのスクリプト。ちなみに Google の公式ドキュメント には、

Cloud SDK と Python 2 用 App Engine SDK には、本番環境の App Engine で動作するアプリケーションをシミュレートするために、ローカルで実行できるローカル開発用サーバー( dev_appserver.py )が同梱されています。

と書かれているので、ローカル開発サーバ自身を表わす名称としても使われているようだ。そういえば「dev_appserver.py を起動する」とも言いますね(あ、この記事のタイトルにも書いてた)。

筆者の場合、件の UserWarning は node_modules フォルダが原因だった。そして、特定のファイルやフォルダをウォッチ対象から除外するには、watcher_common.py(ファイルパスはお使いの環境によって変わります)を編集する、というのが今回のツイートの趣旨。

ところが、である。じつは後で知ったのだが、dev_appserver.py 起動時のオプションに --watcher_ignore_re というそれっぽい指定ができるものを見つけた。

たとえば今回のように node_modules フォルダを除外したいなら、

dev_appserver.py . --watcher_ignore_re=.*/node_modules/.*

と指定すればオーケー。--watcher_ignore_re の re の部分が Python の正規表現操作モジュールである「re」を彷彿とさせるので、この例のように正規表現で指定するのが正しいと思う(少なくとも筆者の環境ではこれで解決した)。

こちらのほうが gcloud components のアップデートのたびに当該箇所を書き換えなくても済むぶん、スマートな解決法と言えるかもね。


2020/04/09 追記

dev_appserver.py 起動時のオプションに --watcher_ignore_re を付ける件、ある日 Google Cloud SDK をアップデートしたところ、妙なエラーが出るようになった。

TypeError: <_sre.SRE_Pattern object at 0x104f897a0> is not JSON serializable

仕方なくまた watcher_common.py を適宜書き換える方法に戻していたのだが、その後、Stack Overflow にて 以下のコメント を発見した。

The --google_analytics_client_id= argument is necessary, otherwise it will throw an error saying the regular expression in watcher_ignore_re is not JSON serializable, as reported here

つまり、dev_appserver.py の起動時に(さらに) --google_analytics_client_id というオプションが必要だということ。しかも値は未指定のまま。なんだか釈然としないが、試したところエラーは解決して元どおりになったのでよしとしよう。

dev_appserver.py . --google_analytics_client_id= --watcher_ignore_re=".*/node_modules/.*"

あ、クオートは不要かもしれないけど、一応。