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のインスタンスの数の上限を変更して、無事にエラーを解決しました!