Rails4.2を始める

# Rails4.2 チュートリアル

* そこそこハマったのでメモっておく
* railsのデフォルトページが表示されるまでがスコープ

## 環境

* ホストOS：Windows7
* ゲストOS：CentOS6.5
* Ruby：2.1.1p76
* Rails：4.2.0

## 環境整備

* Bundlerのインストール

```
gem i bundler
```
* Railsのインストール
    * これをインストールすると、フレームワークを構成するActiveRecordやActionPack、さらにRailsが依存しているサードパーティのgemも全てインストールされる。
    * ドキュメントとか不要なものは弾く `--no-ri --no-rdoc`
    * 進捗状況はわかるようにする `-V`

```
gem i rails --no-ri --no-rdoc -V
```
* Railsアプリケーション作成
    * アプリケーションジェネレータが呼び出される。
    * ディレクトリが作成されてその中に必要な物がザクザク作成される

```
rails new rails4_test
```
* エラー。なんかnokogiriのインストールでこけたっぽい

```
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /home/vagrant/.rbenv/versions/2.1.1/bin/ruby extconf.rb
checking if the C compiler accepts ... yes
Building nokogiri using packaged libraries.
checking for iconv... yes
************************************************************************
IMPORTANT NOTICE:

Buidling Nokogiri with a packaged version of libxml2-2.9.2
```

* 参考
    * [gem install nokogiri でハマった話](http://memo.newescape.net/ruby-on-rails/307)

* バージョン指定してnokogiriをインストール

```ruby

gem install nokogiri -v '1.6.0'

```

* 作成したRailsプロジェクト配下のGeimfile を編集（追記）
* 参考
    * [Railsチュートリアルのnokogiriのインストールでコケた時の対処法](http://akinov.hatenablog.com/entry/2014/06/26/230655)

```ruby

ENV['NOKOGIRI_USE_SYSTEM_LIBRARIES'] = 'YES'
gem 'nokogiri', '1.6.0'

```

* アップデート

```ruby

bundle update

```

* 成功した

```
Your bundle is updated!
```

* nokogiri問題はなんかいろんな人が躓いてるっぽい（以下参考）
    * [Nokogiri 1.6.0 のインストールが遅い件とその解決方法](http://qiita.com/suu_g/items/fcf549e16c797a9d7dc0)
    * [Installing Nokogiri](http://www.nokogiri.org/tutorials/installing_nokogiri.html)
    * [【Ruby2.0.0 or 1.9.3 on Rails4.0】 Nokogiri 1.6.0 インストールできない？！](http://tacatakatca.hatenablog.com/entry/20131020/1382270726)
    * [Bundle install nokogiriでハマったとき](http://qiita.com/kenzan100/items/ac6f284605126d98dc13)
    * [Railsでnokogiriのインストールが出来ない](http://qiita.com/omega999/items/cd0420aae064cfddc725) 
    * [nokogiriをビルドできずにrailsのインストールが失敗する](http://qiita.com/chobi9999/items/7b66677b3bf3da8acc14) <-- 【2015/06/22追記 ここに記載の内容通りやればスッキリ】

<br>

* ポートの変更
* 他のWebアプリをすでにポート３０００で使ってるので、別ポート（３００１）を使用することにする

```ruby
require 'rails/commands/server'
module Rails
  class Server
    def default_options
      super.merge({:Port => 3001})
    end
  end
end
```

* ポートを開放してやる

```
vi /etc/sysconfig/iptables
```

* 開いたファイルに書きを追記する

```
-A INPUT -p tcp -m tcp --dport 3001 -j ACCEPT
```

* 結果的にiptablesは以下の感じになった

```
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3001 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
```

* iptablesを再起動しておく

```
/etc/init.d/iptables restart
```

## 改めて起動

* もっかいrailsプロジェクトを新規作成

```
rails new rails4test
```

* プロジェクトディレクトリに入ってrails起動

```
cd rails4test
rails s
```

* 別のエラー

```
WARN  TCPServer Error: Address already in use - bind(2)
```

* なんか動いてるので問題があるっぽい該当プロセスを見つけて

```
ps ax
```

* 殺す

```
kill -9 プロセス番号
```

* 再度Rails起動

```
rails s
```

* 起動したっぽい

```
=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://localhost:3001
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2014-12-24 15:02:59] INFO  WEBrick 1.3.1
[2014-12-24 15:02:59] INFO  ruby 2.1.1 (2014-02-24) [x86_64-linux]
[2014-12-24 15:02:59] INFO  WEBrick::HTTPServer#start: pid=19003 port=3001
```


* ホストOSから接続してみる（http://ゲストOSのIP:3001）
* 繋がらない

* ゲストOS内でcurlしてみる

```
curl http://ゲストOSのIP:3001
```

* つながる
* なんかlistenするアドレスを指定して起動する必要があるらしい
* Rails4.2からの変更らしい(以下参考)
    * [Rails4.2beta1をインストールして最初にはまったこと](http://www.techscore.com/blog/2014/09/12/rails4-2beta1%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E6%9C%80%E5%88%9D%E3%81%AB%E3%81%AF%E3%81%BE%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8/)

* -b オプション付きで起動

```
rails s -b 0.0.0.0
```

* 起動時のメッセージが変わった

```
=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://0.0.0.0:3001
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2014-12-24 15:07:56] INFO  WEBrick 1.3.1
[2014-12-24 15:07:56] INFO  ruby 2.1.1 (2014-02-24) [x86_64-linux]
[2014-12-24 15:07:56] INFO  WEBrick::HTTPServer#start: pid=19030 port=3001
```

* ホストOSからアクセスしてみる（http://ゲストOSのIP:3001）
* つながった（やったー）