デフォルトでrails serverを--bind=0.0.0.0付きで起動する方法
前回、RailsでWebRickサーバを単純に起動したら、localhostからしかアクセスできない
現象について、以下のようにbindオプションで0.0.0.0(つまり、どのIP AddressからもOKという意味)を指定して、起動せよという話しを書いた。
- rails server --bind=0.0.0.0
これは、カフェとかの公共の場でプログラミングしているときに、
安易に他者からアクセスさせないようにさせているためだ。
セキュリティ強化という面では、ノマドワーカー(死語?)には必要な気遣いだが、
そうではない者にとっては余計なお節介である。
そこで、デフォルトでこういうことを指定して起動できんのかいということになる。
ニーズはそれなりにあるようだ。
デフォルトで `rails s` で `rails s —bind=0.0.0.0` してほしい
— インターナショナル (@mz_) 2015年10月20日
色々調べていくと、解決先としてはRailsアプリ内にあるconfig/boot.rbをいじれば良いらいしい。
試してみた。
以下、現状把握1、2と進んで、最後に結果を示す。
<現状把握その1:rails server(オプション無し)_>
まず最初に、何もせずにコマンド「rails server」を実行するとどうなるかというと、
以下のように、localhostからはアクセスできるが、
IPアドレス指定するとアクセスできない。
(我が家はローカルアドレスとしては、Railsサーバに192.168.100.3を振っている)
<現状把握その2:rails server bindオプションで0.0.0.0指定>
次に、コマンド「rails server --bind=0.0.0.0」を実行するとどうなるかというと、
IPアドレス指定でアクセスできるようになる。
<解決先:config/boot.rbをいじる>
それでは、設定方法と結果を示していきます。
ステップ1:config/boor.rbに以下を追記する。
require 'rails/commands/server'
module Rails
class Server
def default_options
super.merge(Host: '0.0.0.0', Port: 3000)
end
end
end
変更内容のイメージとしては以下(上手くコードを記載できないので、画像で失礼。泣
変更前のconfig/boot.rb
私の場合、元々、以下の記述でした。
変更後のconfig/boot.rb
これ↑に、こう↓追記しました(require 'bundler....の下に該当コードを追加)
ステップ2:rails serverを実行する
単純に「rails server」を実行すると....
成功!!!
これで、毎回、bindオプションで0.0.0.0指定して起動しなくて済みますね。
但し、これをやると毎回、Railsサーバが公開状態になります。
セキュリティには十分注意してくださいね。
---
日本語のサイトで参考になるところが見つからなかったので、
以下の海外サイトを参考にさせて頂きました。
最初のStackOverFlow記事のコードを利用しましたが、
下のFullStackNotes記事のコードでも上手くいきました。
Thank you a lot :-))