LoginSignup
125
86

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-06-13

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

125
86
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
125
86