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番を使用するので

$ 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 を実行して、

$ 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)

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

rails s コマンドではデフォルトで3000番ポートを使用して起動します。

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

初学者がこの状況に遭遇するのは、殆どの場合、別の Rails アプリを起動している場合です。

同じ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 を実行して、

$ 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)

このように syntax error と表示される場合は、Rails プロジェクト内のどれかの Ruby プログラムに構文エラーがあります。

そして、その発生箇所はメッセージの直前に記載があります。

上記の例の場合は

... config/routes.rb:3:

とあるので、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をコピーしました