ponkiti's blog

主に自分用、イベント参加メモや備忘録として利用

Ruby on Rails チュートリアル「第1章 ゼロからデプロイまで」の環境構築メモ(1) 〜Railsサーバ起動まで〜

環境

インストール対象

2014年10月19日時点でのRuby on Rails チュートリアルではそれぞれ下記のバージョンを使っているので、それに倣うこととする。

VagrantRailsをインストールするための環境を作る

任意のディレクトリ(今回は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
    • ralis serverは3000番ポートを使っているため、仮想マシンの3000番ポートをホストOS上(Mac)の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して、仮想マシンSSH接続する。

$ 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 updatebundle 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

f:id:pyoonn:20141017171811p:plain

参考

*1:20141217追記:rails serverが起動できているのに http://localhost:3000/ にアクセスできない場合、iptablesを停止(service iptables stop)して http://localhost:3000/ にアクセスできるか確認してみること。iptablesを停止した状態でアクセスできる場合、iptables(/etc/sysconfig/iptables)の設定ができていない可能性があるため、3000番ポートを許可しているかどうかを確認すること。