概要
Railsチュートリアルを完了して、さあイチからアプリ作成に取り掛かろうとしたところ、
rails server
でサーバーを起動してもブラウザから表示できない。
表示できない理由
どうやら、接続を受け付けるIPアドレスがlocalhostのみとなっていることが原因。
# rails s
=> Booting Puma
=> Rails 5.1.7 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.5.1-p57), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
# rails s
=> Booting Puma
=> Rails 5.1.7 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.9.1 (ruby 2.5.1-p57), codename: Private Caller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
* Listening on
の項目が、Railsチュートリアル時にはtcp://0.0.0.0:3000
だったのに、
今回はtcp://localhost:3000
となっている。
* Listening on 〜
の箇所は、Railのサーバーが接続を受け付けるIPアドレスを表している。
ここに記載されたIPでないと接続してもページは表示されない。
* Listening on tcp://localhost:3000
この場合には、localhostからの接続のみを受け付けている。
自分はDockerでRails環境を構築していたので、localhostとは見なされなかったようですが、
環境によっては普通に使えるかも知れません。
* Listening on tcp://0.0.0.0:3000
0.0.0.0
は全てのIPアドレスを意味する。
なのでこの場合は、どのIPアドレスからでも接続できることを意味する。
解決方法
その1 rails server のbindオプションを使う。
railsサーバー起動時にbindオプションを使えば、リスニングするIPを指定することができる。
rails server --bind=0.0.0.0
もしくは rails s -b 0.0.0.0
。
その2 config/boot.rb書き換える
毎度bindオプションを指定するのが面倒ならば、config/boot.rbでデフォルト設定を変更するという方法もあるらしい。
rails s -b 0.0.0.0が面倒な場合のメモ - Qiita
その3 gem 'puma'のバージョンを変える
そもそも何故Railsチュートリアルの時には、bindオプションを指定しなくても良かったのか?
config/boot.rbを書き換えてもいない。
調べてみると、Gemfileを書き換えてbundle updateを実行した後は、
デフォルトで* Listening on tcp://0.0.0.0:3000
となっているようだ。
なので、Gemfileで指定したgemのどれかが、デフォルトのリスニングIPアドレスの設定を変えているはず。
もっとも可能性の高そうな、gem 'puma'だけをRailsチュートリアルと同じ'3.9.1'にし、bundle update。
source 'https://rubygems.org'
git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
"https://github.com/#{repo_name}.git"
end
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.7'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use Puma as the app server
gem 'puma', '3.9.1'
・
・
結果、デフォルトのリスニングIPアドレスが変わっていることが確認できた。
補足
Railsのバージョンが4.2になった時、デフォルトのリスニングIPアドレス設定が変わったということがあったらしい。
rails sで起動したサーバにブラウザからアクセスできない - Qiita