Ruby+gems+Railsインストールガイド

#Ruby+gems+Railsインストールガイド

動作環境

|**Component**|**Version**|
|---|---|
| Centos | 6.6 |

##1 Rubyの関連ツールをインストール

~~~sh
yum -y update
yum -y install gcc-c++ patch readline readline-devel zlib zlib-devel 
yum -y install libyaml-devel libffi-devel openssl-devel make 
yum -y install bzip2 autoconf automake libtool bison iconv-deve
~~~

##2 Ruby Version Manager(RVM)をインストール

~~~sh
curl -L get.rvm.io | bash -s stable
cd /usr/local/rvm/archives/
find /usr/local/rvm/archives -name "*.tgz" | xargs tar xzvf
version=`find . -maxdepth 1 -type d | awk -F "-" '{print $2}'`
version=`echo $version | sed "s/\r//g"`; cd "rvm-$version"
./install
source /etc/profile.d/rvm.sh
~~~

##3 Ruby&gemsをインストール

~~~sh
rvm install 1.9.3
rvm install 1.8.6
~~~

##4 デフォルトのRubyバージョンを指定

~~~sh
rvm use 1.9.3 --default
ruby --version
~~~

##5 Railsのインストール

~~~sh
gem install rails
~~~

==10分程度かかるはずだが、あまりに遅い場合は下記を実行==

~~~sh
echo 'options single-request-reopen' >> /etc/resolv.conf
~~~

#Ruby Gemsのインストール

##1 Rubyを最新版に更新します。(1.8系はNG)

###1.1 RVM(Ruby Version Manager)を使って、Rubyを最新版に更新

###1.2 Ruby2.2.1をインストール

~~~sh
rvm list known
rvm install 2.2.1
ruby -v
# ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
~~~

##2 ダウンロードとインストール
###2.1 下記URLからダウンロードします。

[http://rubygems.org/](http://rubygems.org/)

~~~sh
yum -y update
yum -y install rubygems
yum install ruby-irb
gem update --system
~~~

##3 bundlerをインストールします。
==bundlerは、javaでいうところのantやmavenのようなもの。必要なライブラリを自動でダウンロード、配置してくれるものです。==

####bundlerの利点:使用するgemのバージョンを指定できる
あるプロジェクトではtwitter gem 5.x系を、別のプロジェクトでは4.x系を使いたい場合、bundlerなしで`require 'twitter'`と、すると、どちらのプロジェクトでも、バージョンの大きい5.xを読み込んでしまう。そのマシンに存在する最もバージョンの大きいtwitter gemを読み込んでしまうのだ。つまり、新しくtwitter gemを使ったプロジェクトを始めるだけで、古いプロジェクトは何も手を触れていないのに壊れてしまう。
作ったプログラムが1年後もちゃんと動くにはbundler必須である。

~~~sh
gem install bundler
~~~

###3.2 Gemfileを編集します。
####3.2.1 使用するgemを、Gemfileに列挙します。

~~~sh
gem init
~~~

->/root/Gemfileに、ひな形が生成されます。

/root/Gemfile

~~~
source "https://rubygems.org"
gem 'sinatra'
gem 'sinatra-contrib'
~~~

※意味 – sinatraはどのバージョンでもいい、オートリロードをするsinatra-contribを入れる。

###3.3 bundle install
Gemfileを作成したディレクトリで`bundle install`を実行してください。`--path`を指定しないとRuby環境のGemディレクトリにインストールされてしまいますので気を付けましょう。ディレクトリ名は`vender/bundle`が推奨されているようです。
また、毎回--pathを指定するのも面倒ですので`bundle config --global path`コマンドで初期値を設定しておきます。

~~~sh
bundle install --path vendor/bundle
bundle config --global path 'vendor/bundle'
~~~

##4 bundlerで指定したgemを使います
※これやらないと、システムに入っている最新版gemを使ってしまいます。

###4.A 実行時に指定する方法
今まで

~~~sh
ruby foo.rb
rackup config.ru
~~~
等で実行していたのを、

~~~sh
bundle exec ruby foo.rb
bundle exec rackup config.ru
~~~
とする。

###4.B スクリプト内で指定する方法
- a)使用バージョンがGemfile.lockに書かれている物に固定されます。

~~~ruby
require 'bundler/setup'
~~~

- b)gemを一括requireする方法。

~~~ruby
Bundler.require
~~~

==注意点==

※Gemfileはカレントディレクトリにある物を参照するので、crontabで使う場合はプロジェクトの中にcdしてからrubyしないといけません。

- 7時30分に実行する例

~~~sh
30 7 * * * cd $HOME/src/ruby/myapp && bundle exec ruby start.rb > /dev/null 2>&1
~~~

##5 サンプルプログラムを配置
- myapp.rb(場所はどこでも良い。)

~~~ruby
Bundler.require
get '/' do
    "Hello world " 
end
~~~

- 実行

~~~sh
bundle exec ruby myapp.rb -o 0.0.0.0 -p 12345
~~~

#References
- [Ruby書くならBundler使え](http://shokai.org/blog/archives/7262)
- [【Ruby】bundlerの使い方 (Gem管理)](http://www.task-notes.com/entry/20141230/1419937660)