@テク野路ジーロード

配信タグシェアリングシステムpickvyを開発、運営開始。最近は、Googleアナリティクスを研究中

デフォルトでrails serverを--bind=0.0.0.0付きで起動する方法

前回、RailsWebRickサーバを単純に起動したら、localhostからしかアクセスできない
現象について、以下のようにbindオプションで0.0.0.0(つまり、どのIP AddressからもOKという意味)を指定して、起動せよという話しを書いた。

  • rails server --bind=0.0.0.0

sunday150.hatenablog.com

 

これは、カフェとかの公共の場でプログラミングしているときに、
安易に他者からアクセスさせないようにさせているためだ。
セキュリティ強化という面では、ノマドワーカー(死語?)には必要な気遣いだが、
そうではない者にとっては余計なお節介である。

そこで、デフォルトでこういうことを指定して起動できんのかいということになる。
ニーズはそれなりにあるようだ。

 

色々調べていくと、解決先としてはRailsアプリ内にあるconfig/boot.rbをいじれば良いらいしい。
試してみた。
以下、現状把握1、2と進んで、最後に結果を示す。

 

<現状把握その1:rails server(オプション無し)_>

まず最初に、何もせずにコマンド「rails server」を実行するとどうなるかというと、
以下のように、localhostからはアクセスできるが、
IPアドレス指定するとアクセスできない。

f:id:sunday150:20160506015847p:plain

f:id:sunday150:20160506015900p:plain
(我が家はローカルアドレスとしては、Railsサーバに192.168.100.3を振っている)

 

<現状把握その2:rails server bindオプションで0.0.0.0指定>

次に、コマンド「rails server --bind=0.0.0.0」を実行するとどうなるかというと、
IPアドレス指定でアクセスできるようになる。

f:id:sunday150:20160506020409p:plain

 

<解決先: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
私の場合、元々、以下の記述でした。

f:id:sunday150:20160506020609p:plain


変更後のconfig/boot.rb
これ↑に、こう↓追記しました(require 'bundler....の下に該当コードを追加)

f:id:sunday150:20160506020629p:plain

 

ステップ2:rails serverを実行する
単純に「rails server」を実行すると....

f:id:sunday150:20160506020900p:plain

 

成功!!!
これで、毎回、bindオプションで0.0.0.0指定して起動しなくて済みますね。

 

但し、これをやると毎回、Railsサーバが公開状態になります。
セキュリティには十分注意してくださいね。

 

---

日本語のサイトで参考になるところが見つからなかったので、
以下の海外サイトを参考にさせて頂きました。
最初のStackOverFlow記事のコードを利用しましたが、
下のFullStackNotes記事のコードでも上手くいきました。
Thank you a lot :-))


stackoverflow.com

fullstacknotes.com