LoginSignup
20
12

More than 3 years have passed since last update.

Railsチュートリアル経験者が引っかかりやすい、Railsのページが表示できないトラブル

Posted at

概要

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チュートリアル時
# 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。

Gemfile
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

20
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
12