omohayui blog

おも‐はゆ・い【面映ゆい】[形][文]おもはゆ・し[ク]《顔を合わせるとまばゆく感じられる意》きまりが悪い。てれくさい。

GAE で監視ファイルが多すぎて auto reload が走らない件

何が起きていたか?

・ローカル開発環境で go のテンプレートファイルを更新しても GAE の auto reload が走らない
*.go ファイルを更新したときは走る
・go version go1.6.2 (appengine-1.9.40) darwin/amd64

goapp 起動時の error log

/usr/local/Cellar/app-engine-go-64/1.9.40/share/app-engine-go-64/google/appengine/tools/devappserver2/mtime_file_watcher.py:115: UserWarning: There are too many files in your application for changes in all of them to be monitored. You may have to restart the development server to see some changes to your files.

原因

  • 監視ファイルが多くなった為、ファイル監視の閾値を超えてしまった
  • たぶん node module 系が含まれてしまっている

閾値と監視対象ファイルをどこで設定しているのか

ファイル数上限

github.com

_MAX_MONITORED_FILES = 10000

監視対象外ファイル

python-compat-runtime/watcher_common.py at ee5cffab9b62ba293c61228260735ad5c9a9395c · GoogleCloudPlatform/python-compat-runtime · GitHub

_IGNORED_FILE_SUFFIXES = (
    # Python temporaries
    '.pyc',
    '.pyo',
    # Backups
    '~',
    # Emacs
    '#',
    # Vim
    '.swp',
    '.swo',
)

とりあえずの対応

  • これらの設定は固定値で外から指定できなさそうなので一旦直接書き換えた・・

(その1)ファイル上限数を変更

vim /usr/local/Cellar/app-engine-go-64/1.9.40/share/app-engine-go-64/google/appengine/tools/devappserver2/mtime_file_watcher.py

下記のように書き換え

-- _MAX_MONITORED_FILES = 10000
++ _MAX_MONITORED_FILES = 100000

(その2)除外ファイルに追加

vim /usr/local/Cellar/app-engine-go-64/1.9.40/share/app-engine-go-64/google/appengine/tools/devappserver2/watcher_common.py

下記のように追記

_IGNORED_FILE_SUFFIXES = (
    # Python temporaries
    '.pyc',
    '.pyo',
    # Backups
    '~',
    # Emacs
    '#',
    # Vim
    '.swp',
    '.swo',
++    '.js',
)