rails server (rails s) できない原因と対処方法【初心者向け】

Ruby on Rails

rails が起動できません

この問題を解決します。

初心者のうちは rails s でサーバが起動しないと驚きますよね。
rails サーバが起動しない原因はある程度パターンがあり、解消手順もカンタンなものが多いです。
しかし、知らないと戸惑うことが多いのも事実です。

本記事では rails s で起動しないパターンと、その解消法を解説していきます。

考えられるパターンを網羅しました。
本記事を読めば正常に起動できるようになりますよ!

スポンサーリンク

A server is already running

rails s で Rails を起動しようとして

$ rails s
=> Booting Puma
=> Rails 6.1.4.1 application starting in development
=> Run `bin/rails server --help` for more startup options
A server is already running. Check /Users/xxx/yyy/zzz/tmp/pids/server.pid.
Exiting

このような出力で終了する場合は既に Rails が起動しています

「A server is already running = サーバは既に実行中です」という意味です。

別のターミナルで実行して止めていないという状態ですので、rails s を実行しているターミナルを探して止めましょう。

実行しているターミナルが見つからない場合(ps, lsof, kill コマンド)

rails s を実行中のターミナルを消してしまった場合は ctrl+c などで止めることができません。
その場合は kill コマンドで強制的に停止します。
kill コマンドで停止するには、プロセスIDが必要です。

rails サーバのプロセスを調べるには ps コマンドを使用します。

$ ps
  PID TTY           TIME CMD
(中略)
 4713 ttys008    0:07.43 puma 5.4.0 (tcp://localhost:3000) [アプリ名]
(中略)

PIDの列がプロセスIDです。
この場合は 4713 ですね。
プロセスIDが分かっていれば kill コマンドで停止することができます。

kill コマンドの使用方法は以下の通りです。

$ kill プロセスID

先程の例では rails サーバはプロセスID 4713 で起動していたので以下で停止できます。

$ kill 4713

ps コマンドのほかに lsof というコマンドでもプロセスIDを探せます。

$ lsof -i :ポート番号

rails s はデフォルトでは3000番を使用するので以下のように指定すると、3000番ポートを仕様しているプロセスの一覧が表示されます。

$ lsof -i :3000
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
ruby    88068  xxx   12u  IPv4 0x35b5fb86fe055ad3      0t0  TCP localhost:hbci (LISTEN)
ruby    88068  xxx   13u  IPv6 0x35b5fb86fc03a923      0t0  TCP localhost:hbci (LISTEN)

ps コマンドと同様に PID がプロセスIDです。
上記の例の場合は 88068 です。

そのため以下のコマンドで停止できます。

$ kill 88068

Address already in use

rails s を実行して、以下のように Address already in use と表示される場合は、3000番ポートで起動しているプロセスが既に存在します。

$ rails s
=> Booting Puma
=> Rails 6.1.4.1 application starting in development
=> Run `bin/rails server --help` for more startup options
(中略()
 Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)

rails s コマンドではデフォルトで3000番ポートを使用して起動します。
ポートの利用は先勝ちなので、既に3000番ポートを使用しているプロセスが存在する場合は起動ができません。

初学者がこの状況に遭遇するのは、ほとんどの場合、別の Rails アプリを起動しているのが原因です。
既に立ち上げているのに、別のターミナルでさらに立ち上げようとすると A server is already running が出ます。

対応方法は、A server is already runningのときと同様に rails s を実行中のターミナルを探して停止することです。
ターミナル見つからない場合も同様に ps コマンドや lsof コマンドで探してきて kill コマンドで停止しましょう。

No space left on device

No space left on device というメッセージが出力された場合はディスクがいっぱいになっています。
不要なファイルを削除してディスクスペースを空けましょう。

Syntax Error

rails s を実行して、以下のように syntax error と表示される場合は、Rails プロジェクト内のどれかの Ruby プログラムに構文エラーがあります

$ rails s
=> Booting Puma
=> Rails 6.1.4.1 application starting in development
=> Run `bin/rails server --help` for more startup options
Exiting
Traceback (most recent call last):
(中略)
/.../gems/bootsnap-1.8.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:60:in `load': /.../config/routes.rb:3: syntax error, unexpected end-of-input, expecting `end' (SyntaxError)

その発生箇所はメッセージの直前に記載があります。
上記の例の場合は以下のように routes.rb の 3 行目であることがわかります。

... config/routes.rb:3:

構文エラーを修正して再度 rails s を実行しましょう。

ターミナルがフリーズして何も入力できなくなる

$ rails s

のように rails s コマンドを実行したのに

  • 何も表示されない
  • 何も入力できない

という状況になったら rails s コマンドがフリーズしています。

これは spring というキャッシュ機構がおかしくなっているのが原因です。
以下に rails コマンドがフリーズした場合の対処法について解説してありますので参照してください。
≫ 参照: rails コマンドがフリーズしたら spring stop を実行しよう【初心者向け】

まとめ

rails s が起動できない場合の原因と対処方法を解説しました。

  • A server is already running → 既に起動している rails サーバのプロセスを探して止める
  • Address already in use → 既に起動している rails サーバのプロセスを探して止める
  • No space left on device → 不要なファイルを消す
  • Syntax Error → 該当ファイルの構文エラーを修正する
  • フリーズする → sprint stop を実行する

初学者のころは rails s コマンドが起動しないと焦ってしまいますが、落ち着いて対処しましょう。

その他の Rails エラー関連記事はこちら

Ruby を学ぶなら読んでおきたい一冊

タイトルとURLをコピーしました