こんにちは、寺岡です。
Rails4.2は来年の夏に予定されているRails5.0に向けて、4.x系最後のマイナーバージョンアップになるそうです。
今回はRails4.2beta1のインストール方法と、ちょっとしたはまりポイントをご紹介します。
まずはさらっとインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# railsをインストールするディレクトリを作成 mkdir rails42 cd rails42 # Gemfileの作成 bundle init # Gemfileにrailsをgithubのmasterブランチからインストールするように指定 echo 'gem "rails", github: "rails", branch: :master' >> Gemfile # システムのgemに混ざらないようにvendor/bundle以下にインストールする bundle install --path vendor/bundle # カレントディレクトリ(rails42)にrailsアプリケーションを作成 bundle exec rails new . # 途中Gemfileを上書きするか尋ねられるので「Y」で上書き Overwrite /var/sites/rails42/Gemfile? (enter "h" for help) [Ynaqdh] |
railsのダウンロードにかなりの時間がかかりますので気長に待ちましょう。
インストール完了後、おもむろにサーバを起動してみます。
1 2 3 4 5 6 7 8 |
./bin/rails s => Booting WEBrick => Rails 4.2.0.beta1 application starting in development on http://localhost:3000 => Run `rails server -h` for more startup options => Ctrl-C to shutdown server [2014-09-11 11:22:11] INFO WEBrick 1.3.1 [2014-09-11 11:22:11] INFO ruby 2.1.0 (2013-12-25) [x86_64-linux] [2014-09-11 11:22:11] INFO WEBrick::HTTPServer#start: pid=29792 port=3000 |
問題なく起動しましたね。
ブラウザからアクセスしようとしたのだが…
筆者はWindows環境にVirtualBox上にLinuxを立てて開発することが多く、今回もその構成で試しました。
LinuxはCUIのみで利用しているため、ホストのWindows環境から
1 |
http://ゲストLinuxのIP:3000/ |
でアクセスし、ブラウザで確認してみます。
あれ…接続できない?
なんとなく閃くものがあったので、Linux環境からwgetでアクセスしてみます。
1 |
wget http://localhost:3000/ |
こちらは問題なくアクセスできました。
次に、ssコマンドでリッスンポートとIPを確認してみます。
1 2 |
ss -lnpt | grep 3000 LISTEN 0 128 127.0.0.1:3000 *:* users:(("ruby",29792,9)) |
ループバックアドレスの127.0.0.1でlistenされているため、ホストOSからはアクセスできなかったようです。
./bin/rails sで起動したログよくよく見ると、「on http://localhost:3000」となっていますね。
試しにrails4.1の rails s で起動してみると「on http://0.0.0.0:3000」と表示され、
0.0.0.0(=全てのアドレス)でlistenされました。
rackのデフォルトが修正されていた
この修正はどこで入ったのかと調べてみると、rackバージョン1.6での仕様変更のようでした。
https://github.com/rack/rack/commit/28b014484a8ac0bbb388e7eaeeef159598ec64fc
デフォルトではHostオプションにlocalhost(普通は127.0.0.1)が指定されるように変更されています。
喫茶店やカンファレンスで公衆Wifiに繋いだ場合に不正アクセスされるのを防ぐのが目的だそうです。
listenするアドレスを指定して起動する
listenするアドレスを指定する方法を探すため、rails s のhelpを確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
./bin/rails s --help Usage: rails server [mongrel, thin, etc] [options] -p, --port=port Runs Rails on the specified port. Default: 3000 -b, --binding=ip Binds Rails to the specified ip. Default: 0.0.0.0 -c, --config=file Use custom rackup configuration file -d, --daemon Make server run as a Daemon. -u, --debugger Enable the debugger -e, --environment=name Specifies the environment to run this server under (test/development/production). Default: development -P, --pid=pid Specifies the PID file. Default: tmp/pids/server.pid -h, --help Show this help message. |
お、ありましたね。
-b オプションで指定できるようです。
説明がDefault: 0.0.0.0 になったままなのはご愛嬌。
1 2 3 4 5 6 7 |
# 全てのアドレスでlistenするように-b 0.0.0.0を指定 ./bin/rails s -b 0.0.0.0 => Booting WEBrick => Rails 4.2.0.beta1 application starting in development on http://0.0.0.0:3000 => Run `rails server -h` for more startup options => Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option) => Ctrl-C to shutdown server |
rails4.2やrack1.6はまだベータ版なので、正式版の時点でどうなっているかはわかりませんが、
-bオプションの存在をそっと心にとどめておくとよいかもしれません。