侍えんじにあ 成長日記

駆け出しシステムエンジニアの学習日記です。

【Ruby】起動中のポートを確認して閉じる

みなさんお久しぶりです。やきうです。

近頃は研修最後のプログラムであるショッピングサイトづくりに時間を取られており、うちでなかなかプログラムをする時間を取れませんでした。

そんな中でも通勤時間などを利用して参考書を読むなりしてRailsの学習を進めていました。今日は参考書で吸収した知識をコードに起こして確認していました。その最中にこんなエラーに遭遇したので、対処法を復習がてらまとめます。エラー内容はこんな感じです。

 
【エラー内容】
 
Puma starting in single mode...
* Version 3.11.4 (ruby 2.4.1-p111), codename: Love Song
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:8080
Exiting
/usr/local/rvm/gems/ruby-2.4.1/gems/puma-3.11.4/lib/puma/binder.rb:270:in `initialize': Address already in use - bind(2) for "127.0.0.1" port 8080 (Errno::EADDRINUSE)
 
読んでみると同じサーバー上で他のポートが起動しているから、別のポートを起動しようとしたときに「他のサーバーが動いてるから起動できないよ〜」というエラー。
 
 
【改善策】
まず、起動しているサーバーのポート番号を調べる。上のエラー表示から、起動中のポート番号は8080だとわかるので、
 
sudo lsof -i:8080
 
をターミナルで実行する。結果は以下にの通り。
 
 
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby               6820   ec2-user   11u  IPv4  24810      0t0  TCP localhost:webcache (LISTEN)
ruby               6820   ec2-user   12u  IPv6  24811      0t0  TCP localhost6:webcache (LISTEN)
 
 
COMMANDを見るとRubyとある。これはRubyで起動した状態だということである。
このポートを一旦閉じるには、PIDにある番号を「kill」というコマンドとともにターミナルで入力するだけ。上の例の場合だと、
 
Kill 6820
 
である。
そして再度、rails server を実行するとサーバーが起動してくれる。
ちなみに、ポート番号を指定して起動する場合は、
 
rails server -p 指定したいポート番号
 
で起動してくれる。
 
【疑問点】
ただ、一つ疑問が残っていまして…
 
私のRailsの実行環境はcloud9なのですが、configフォルダ下のPuma.rbでは
 
port ENV.fetch("PORT") { 3000 }
 
となっているのに、cloud9で起動するとき、ポート番号を3000に指定して起動するとうまくいかず、8080で指定すると起動できるのがなぜかわかりません。
 
例えばSpring環境の場合、application.propertiesでポート番号を指定し、その指定した番号でlocalhostに接続することになります。
 
Railsの場合はそれは関係ないのですかね?
わかるかたおられましたら、ここでのコメントかtwitterにて回答してくださると嬉しいです。