Help us understand the problem. What is going on with this article?

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

yn-misaki
見習いRubyエンジニア。エディタはVim派です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした