rails consoleが起動できない時の対処法(「FATAL: Listen error」エラー編)

More than 3 years have passed since last update.

railsコンソールを起動しようとした時、エラーが出て起動ができない場合があります。

そんなエラーを解決する方法を紹介します。


開発環境


  • OS: CentOS7.2


開発環境

$ cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)


railsコンソールの起動時に出たエラー


railsコンソールの起動

# 現在いるプロジェクト内のgemを使う場合

$ bundle exec rails c

# マシンにインストールされているgemを使う場合
$ bin/rails c



エラー内容

FATAL: Listen error: unable to monitor directories for changes.

Visit https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers for info on how to fix this.

エラー内容を適当に和訳すると・・・

エラー内容に書いてある通り、サイトにアクセスしてコマンドを実行すれば、コンソールを起動できます。


エラーを解消するコマンド

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p



エラーが発生した原因

railsコンソールが起動できなかったのは、1つの実ユーザIDに対して生成できるinotifyのインスタンスの数の上限が決まっており、その上限に達してしまった為です。

ここで、inotifyとはLinuxファイルやディレクトリのイベントを監視する機能です。

では、1つの実ユーザIDに対して生成できる最大ユーザインスタンスを確認してみましょう。


最大ユーザインスタンスを確認

$ cat /proc/sys/fs/inotify/max_user_instances

128


実行コマンドの解説

原因も判明したので、簡単に実行コマンドの解説をします。


inotifyのインスタンス上限を変更


  • inotifyインスタンスの数の上限を524288に変更します。


  • /etc/sysctl.confにその設定を追記します。



    • /etc/sysctl.confカーネルパラメータを記述する設定ファイルです。




/etc/sysctl.confに設定を追記

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf



パラメータの設定を反映



  • sysctlコマンドで先ほど追記したパラメータを読み込みます。


    • sysctlは、ディレクトリ /proc/sys/配下のファイルに書かれたカーネルパラメータを修正するのに利用します。


    • -pオプションで特定のファイルを指定しない場合、/etc/sysctl.confを読み込みます。




パラーメータの変更

$ sudo sysctl -p



railsコンソールを起動してみよう


  • 無事に、起動が出来ました!!!


railsコンソールの起動

$ bin/rails c # または bundle exec rails c

Loading development environment (Rails 4.1.15)
[1] pry(main)>


まとめ

inotifyのインスタンスの数の上限に達してしまったことにより、railsコンソールが起動できない場合の解決方法を解説しました。

そして、inotifyのインスタンスの数の上限を変更して、無事にエラーを解決しました!