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
-
参考
バージョン指定してnokogiriをインストール
gem install nokogiri -v '1.6.0'
- 作成したRailsプロジェクト配下のGeimfile を編集(追記)
- 参考
ENV['NOKOGIRI_USE_SYSTEM_LIBRARIES'] = 'YES'
gem 'nokogiri', '1.6.0'
- アップデート
bundle update
- 成功した
Your bundle is updated!
- nokogiri問題はなんかいろんな人が躓いてるっぽい(以下参考)
- ポートの変更
- 他のWebアプリをすでにポート3000で使ってるので、別ポート(3001)を使用することにする
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からの変更らしい(以下参考)
-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)
- つながった(やったー)