Ruby on Rails チュートリアル「第1章 ゼロからデプロイまで」の環境構築メモ(1) 〜Railsサーバ起動まで〜
環境
- Mac OS Ⅹ 10.9.5(Mavericks)
- VirtualBox 4.3.18
- Vagrant 1.6.5(CentOS6)
- Vagrant上の仮想マシンに入れるCentOS6には、下記のBoxを使用した。
- http://www.vagrantbox.es/
- CentOS 6.4 x86_64 Minimal (VirtualBox Guest Additions 4.3.2, Chef 11.8.0, Puppet 3.3.1)
- Vagrant上の仮想マシンに入れるCentOS6には、下記のBoxを使用した。
インストール対象
2014年10月19日時点でのRuby on Rails チュートリアルではそれぞれ下記のバージョンを使っているので、それに倣うこととする。
VagrantでRailsをインストールするための環境を作る
任意のディレクトリ(今回はruby_lessons
とした)を作成し、vagrant init
する。
$ mkdir ruby_lessons $ cd ruby_lessons $ vagrant init
Vagrantfileの設定
vagrant init
するとVagrantfileが生成されるので、下記の記述を追記する。
- config.vm.box = "CentOS64"
vagrant box add
で指定した任意のBox名を設定すること。
- config.vm.network "forwarded_port", guest: 3000, host: 3000
# -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # All Vagrant configuration is done here. The most common configuration # options are documented and commented below. For a complete reference, # please see the online documentation at vagrantup.com. # Every Vagrant virtual environment requires a box to build off of. config.vm.box = "CentOS64" (省略) # Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing "localhost:8080" will access port 80 on the guest machine. config.vm.network "forwarded_port", guest: 3000, host: 3000 (省略) end
$ vagrant up $ vagrant ssh
Rubyをインストールするための下準備
バージョンが古いRubyのアンインストール
[vagrant@localhost ~]$ sudo yum -y remove ruby
Gitのインストール
[vagrant@localhost ~]$ sudo yum -y install git
rbenvのインストール
rbenvをインストールし、PATHを通す。
[vagrant@localhost ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv [vagrant@localhost ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile [vagrant@localhost ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
~/.bash_profile
の内容を確認しておく。
[vagrant@localhost ~]$ cat ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)"
source
コマンドを実行し、rbenvのバージョン、もといrbenvコマンドが使用できるかを確認しておく。
[vagrant@localhost ~]$ source ~/.bash_profile [vagrant@localhost ~]$ rbenv --version rbenv 0.4.0-124-g07d6753
ruby-buildのインストール
[vagrant@localhost ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
Rubyのインストール
rbenv install -l
コマンドでインストール可能なRubyのバージョン一覧が確認できるが、今回はRailsチュートリアルに合わせて2.0.0-p0
をインストールする。
[vagrant@localhost ~]$ rbenv install -l [vagrant@localhost ~]$ rbenv install 2.0.0-p0
rbenv global
コマンドの実行を忘れると、ruby
コマンドが効かないので注意すること。
[vagrant@localhost ~]$ rbenv global 2.0.0-p0 [vagrant@localhost ~]$ ruby -v ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]
Railsをインストールするための下準備
~/.gemrcの設定
通常、gem installすると同時にドキュメントがインストールされてしまうため、gemのインストールに時間がかかってしまう。
~/.gemrc
ファイルに--no-rdoc --no-ri
オプションを設定しておくと、以降のgemのインストール時に--no-rdoc --no-ri
オプションが効くようになり、インストールにかかる時間が短縮される。
インストールだけでなく、アップデートにも同様に--no-rdoc --no-ri
オプションを設定することができる。
[vagrant@localhost ~]$ vi ~/.gemrc [vagrant@localhost ~]$ cat ~/.gemrc install: --no-rdoc --no-ri update: --no-rdoc --no-ri
/etc/resolv.confの設定
CentOS6を使用している場合は、/etc/resolv.conf
ファイルにoptions single-request-reopen
を追記しておくこと。これを書いておかないとgem install rails
に1時間ほどかかってしまう・・・。
[vagrant@localhost ~]$ sudo vi /etc/resolv.conf [vagrant@localhost ~]$ sudo cat /etc/resolv.conf ; generated by /sbin/dhclient-script nameserver 10.0.2.3 options single-request-reopen
/etc/sysconfig/iptablesの設定
/etc/sysconfig/iptables
ファイルに-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
を追記しておく。この記述を追加しておかないと、rails s
実行後に3000番ポートにアクセスできない。
[vagrant@localhost first_app]$ sudo vi /etc/sysconfig/iptables
「ここまでのチェックでひっかからなかったパケットは、ICMPパケット"host-prohibited"を返して接続拒否」するため、今回追記する-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
は、-A INPUT -j REJECT --reject-with icmp-host-prohibited
よりも前の行に記述すること。
[vagrant@localhost first_app]$ sudo cat /etc/sysconfig/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 -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
iptablesに追加した内容を保存し、iptablesを再起動する。
[vagrant@localhost first_app]$ sudo service iptables save [vagrant@localhost first_app]$ sudo service iptables restart
Railsのインストール
Railsチュートリアルに合わせてRails 4.0.5
をインストールする。
[vagrant@localhost ~]$ gem install rails --version 4.0.5
インストールしたgemを有効にするため、rbenv rehash
を行う。
- gemやRubyをインストール(アンインストール)した時には、
rbenv rehash
を必ず実行しておくこと。 rbenv rehash
を自動で行うようにするには、gem install rbenv-rehash
しておくとよい。
[vagrant@localhost ~]$ rbenv rehash [vagrant@localhost ~]$ rails -v Rails 4.0.5
Railsアプリケーションの作成
rails new
コマンドを実行して、任意のディレクトリ(今回はfirst_app
ディレクトリ)にRailsアプリケーションを作成する。
[vagrant@localhost ~]$ mkdir rails_projects [vagrant@localhost ~]$ cd rails_projects/ [vagrant@localhost rails_projects]$ rails new first_app
first_app
ディレクトリに移動し、作成されたファイルを確認しておく。
[vagrant@localhost rails_projects]$ cd first_app/ [vagrant@localhost first_app]$ ls Gemfile README.rdoc app config db log test vendor Gemfile.lock Rakefile bin config.ru lib public tmp
デフォルトのGemfileのままだと最新のgemを取得してしまうため、Gemfileにはgemのバージョンをそれぞれ指定しておく。
[vagrant@localhost first_app]$ rm -rf Gemfile [vagrant@localhost first_app]$ vi Gemfile
Gemfileの設定
「Could not find a JavaScript runtime.」というエラーが出る場合、Gemfileにgem 'therubyracer'
を追記しておく。
source 'https://rubygems.org' ruby '2.0.0' #ruby-gemset=railstutorial_rails_4_0 gem 'rails', '4.0.5' group :development do gem 'sqlite3', '1.3.8' end gem 'sass-rails', '4.0.2' gem 'uglifier', '2.1.1' gem 'coffee-rails', '4.0.1' gem 'jquery-rails', '3.0.4' gem 'turbolinks', '1.1.1' gem 'jbuilder', '1.0.2' gem 'therubyracer' group :doc do gem 'sdoc', '0.3.20', require: false end
Gemfileの設定後、bundle update
とbundle install
を実行し、gemをインストールする。
[vagrant@localhost first_app]$ bundle update [vagrant@localhost first_app]$ bundle install
rails serverの起動
rails server
コマンドは省略してrails s
で実行することが可能。
[vagrant@localhost first_app]$ rails s
rails serverの起動を確認
任意のブラウザで http://localhost:3000/ にアクセスする。*1
参考
- Vagrant で Ruby on Rails の環境を構築するまでの手順 - Qiita
- Vagrantの仮想環境でrails serverで動いているアプリケーションにMacのブラウザからアクセスしてみる | Fuzz blog
- http://blog.axross.org/entry/2013/12/19/221625
- iptablesの設定
*1:20141217追記:rails serverが起動できているのに http://localhost:3000/ にアクセスできない場合、iptablesを停止(service iptables stop)して http://localhost:3000/ にアクセスできるか確認してみること。iptablesを停止した状態でアクセスできる場合、iptables(/etc/sysconfig/iptables)の設定ができていない可能性があるため、3000番ポートを許可しているかどうかを確認すること。