Octopressでpreviewしていたらregeneration: 1 files changedが終わらない場合の対処方法
Auto-regeneration never stop and exhausts CPU resource!
昨日、Gemfileを見直していたら、古くなっているgemがいくつかあったので、アップデートしてみたら、regeneration: 1 files changedというメッセージが延々と出続けて、CPUの使用率が100%に張り付いてしまう、という現象に遭遇してしまった。結論からいうと、directory_watcher 1.5.1に加えられた変更が良くなかったらしく、1.4.1に戻したら大丈夫だった。
So, how can I fix it?
Jekyll's “--auto” doesn't work? - Stack Overflow
Stack Overflowに、Jekyllを使っている人の質問が上がっていた。解決方法はdirectory_watcherを1.4.1に戻す事、と書いてあった。1.5.1では、全面的にリファクタリングされているようで、diffを見ただけだと、問題となったコードがどこなのか、よく分からなかった。
Gemfile
を使っている場合は、明示的にdirectory_watcherのバージョンを指定して、bundle update
すればいいはず。
The next Octopress and Jekyll version will come
最初に見つかった解決方法はJekyllを1.0.0 beta3に上げる事(rake watch/generate goes wrong with jekyll --auto/server、Jekyll auto regeneration loop never stops)だったが、このバージョンでは、jekyll --auto
が無くなっており、Otopress masterが対応していないため、Octopress側も2.1にする必要がある(masterではなく、2.1が開発版なのか)。さらに、_config.yml
で定義していたサイトの設定も別の設定方法に変更されているようだった。Octopress 2.1へのマイグレーションは、まだドキュメントになさそうだったので、さらにググっていたら、上記の通り、directory_watcherのバージョン戻せばいいんじゃね?というオチだった。
Octopress 2.1ではguardというgemを使うようになるらしい。READMEには、
Guard is a command line tool to easily handle events on file system modifications.
とある。さらに、
You can configure Guard to make use of the following system notification libraries
と書いてあるので、ファイルシステムの変更を監視して、Growlとか通知センターに通知を送れるようになるのだろうか。そうであれば、rake preview
してるときに、通知されるようになってくれるとすごくうれしい。