Rails環境構築(Windows,VirtualBox,Vagrant,Ubuntu14.04,rbenv,cmder)

Windows上にRails環境を構築する機会があったのでメモとして書きます。Macでもほぼ同じ手順で構築できました。
cf) [Windows 7マシンで、VirtualBox+Vagrantを使いUbuntu 14.04を動かす](http://blog.kondoyoshiyuki.com/2014/06/12/windows7-vagrant-ubuntu14-04/)

### 狙い
VirtualBoxの共有フォルダ上にrailsプロジェクトを作成するので、Windows上の好きなエディタでコードが書けます。テスト用のrailsプロジェクトを作成してserverを起動し、Windowsのブラウザからアクセスするところまで書きました。
![VirtualBox-shared.png](https://qiita-image-store.s3.amazonaws.com/0/7902/cd267d72-dc6c-2bde-a382-f8e4a16fdfdd.png)

引用元)[VirtualBoxやVagrantを用いたRails開発環境の構築方法（前編）](http://thinkit.co.jp/story/2014/06/25/5072)


## VirtualBox導入
ver4.3.14でやろうとしたらエラーが出てvagrant up できませんでした。
vagrant 入れ直したり色々やりましたが、VirtualBoxが原因だったようです。
cf)[Surface pro 3 でvirtualboxでエラーが発生するとき](http://qiita.com/nmatsui/items/80aff4e7f085d8d6de83)
### ver4.3.12を導入
http://download.virtualbox.org/virtualbox/4.3.12/
の VirtualBox-4.3.12-93733-Win.exe を導入

## vagrant導入
http://www.vagrantup.com/downloads.html
windows版を導入

## atom導入(任意)
https://atom.io/
atomのwindows版。便利。sublime-textから乗り換えました。
packge-controlもすぐ使えます。
Atom ERB 便利です。
https://atom.io/packages/atom-erb

## cmder導入(任意)
http://bliker.github.io/cmder/
Fullバージョンを導入

vagrantを利用するのにcmderは別にいりませんが、便利なので導入します。
cygwin,mingwなどより便利だと思います。最初からgitも使えます。
Ctrl + r で History search も利用可能。
文字表示がよく崩れるのが難点。

shift+左クリック選択でコピー。
alt+左クリックで選択で矩形選択コピー。
右クリック もしくはctrl+v でペースト。

日本語表示幅がおかしいので、
settings -> Font -> Monospace のチェックを外す。
cmderについては以下参照。
cf) [開発者がSurfacePro3を買ったらまずやること](http://qiita.com/tanakh/items/a1b4705fb58ef3c89800)


以下、cmderを導入している前提で進める。

## Ubuntu14.04導入
### Ubuntu 14.04 のboxを追加し、vagrant upで起動
cmderを起動し、以下実行。box add には10〜20分ぐらいかかる。

```bash
$ vagrant box add ubuntu14.04 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
$ vagrant box list # ubuntu14.04 が追加されていることを確認。
$ mkdir -p vagrant-dir¥ubuntu14.04  #適当なディレクトリ作成。 cmderでは/ではなく¥
$ cd vagrant-dir¥ubuntu14.04
$ vagrant init ubuntu14.04  #Vagranfileが作成される
$ vagrant up  #ubuntu14.04が立ち上がる
$ vagrant ssh  #ubuntu14.04にsshで入る
```

※ Ubuntu公式 https://cloud-images.ubuntu.com/
https://cloud-images.ubuntu.com/vagrant/trusty/current/

ubuntuにsshで入った後

```bash
$ cd /vagrant # /vagrantがデフォルトの共有フォルダとなっている
$ touch foobar #Windows側でfoobarというファイルが作成されていることを確認し、共有フォルダが機能していることを確認
```

## rbenvでrubyをシステムワイドに導入
cf) [Ubuntu 14.04 で rbenv, ruby-build を使用して Ruby のバージョンを管理する](https://hirooka.pro/?p=5910)
(以下ubuntuではないので別途読み替える必要あり)
[rbenv+ruby-buildをインストールする手順 (CentOS/RedHat)](http://weblabo.oscasierra.net/install-rbenv-rubybuild-to-redhat/)
[Rubyをrbenv+ruby-buildを利用してインストールする手順 (CentOS/RedHat)](http://weblabo.oscasierra.net/rbenv-install-ruby-to-redhat-1/)

```bash
$ sudo su - # rootになる
# apt-get -y update
# apt-get -y upgrade
# apt-get install -y build-essential git libssl-dev  #必要なパッケージのインストール
# cd /opt
# git clone git://github.com/sstephenson/rbenv.git
# echo 'export RBENV_ROOT="/opt/rbenv"' >> /etc/profile
# echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile
# echo 'eval "$(rbenv init -)"' >> /etc/profile
# mkdir /opt/rbenv/plugins
# cd /opt/rbenv/plugins
# git clone git://github.com/sstephenson/ruby-build.git
# source /etc/profile  #/etc/profileを再読込するとrbenvが使えるようになる
# rbenv install -l #導入可能なrubyの一覧を表示
# rbenv install 2.1.2 #10〜20分位かかる
# rbenv global 2.1.2
# which ruby
# ruby -v
```

## Rails環境構築 
/vagrant以下にテスト用rails プロジェクトを作成します。
/vagrant以下の共有フォルダにgemをインストールしようとするとエラーが発生しました。 今回はgemを "/usr/local/src/bundles/プロジェクト名" 以下にインストールします。 
cf) [[小ネタ][Ruby on Rails]bundle install時にText file busy エラー](http://dev.classmethod.jp/server-side/ruby-on-rails/tips_ruby-on-railsbundle-install_text-file-busy-error/)

また、システムのrubyにはbundler以外のgemはインストールしないで進めます。
### rails new まで

```bash
$ apt-get install -y libsqlite3-dev
$ gem i bundler
$ mkdir -p /vagrant/rails/rails-test
$ cd /vagrant/rails/rails-test
$ bundle init  #Gemfileを生成。bundlerがinstallされていないとか出たら、 rbenv rehash 実行
$ vim Gemfile  #railsをコメントイン
```

```rb:Gemfile
# A sample Gemfile
source "http://rubygems.org"

gem "rails"
```

```bash
$ mkdir /usr/local/src/bundles  # gemをインストールするためのディレクトリを作成
$ bundle install --path /usr/local/src/bundles/rails-test
# これで ./bundle/config というファイルに以下のように書き込まれます。次回から単にbundle install と実行すれば、指定したディレクトリにgemが入ります。
```

```rb:.bundle/config
BUNDLE_PATH: "/usr/local/src/bundles/rails-test"
```

```bash
$ bundle exec rails new .   #Gemfileを上書きしてよいか聞かれるので yes。 sprocket周りのエラーでこける
$ bundle update
```

(※明示的にrbenvのrubyを使うことの宣言は rbenv exec …　)


cf) gemをrailsのプロジェクトごとにインストールして管理することに関しては以下参照
[システムのgemにrailsをインストールせずrails newする](http://qiita.com/youcune/items/222777415f00d19cccb4)

### therubyracer追加
```bash
$ vim Gemfile  #15行目のtherubyracerをコメントイン
```

```rb:Gemfile
gem 'therubyracer',  platforms: :ruby
```

```bash
$ bundle install
$ exit #sudoからログアウト
$ exit #ubuntuから一度ログアウト 
```


### ポートフォワーディング
guestの3000番を、hostの13000番にポートフォワーディング

```bash
$ vim Vagrantfile  #23行目を変更
```

```rb:Vagrantfile
config.vm.network "forwarded_port", guest: 3000, host: 13000
```

```bash
$ vagrant reload  #ubuntu再起動
$ vagrant ssh  #再度ubuntuにログイン
```



### rails server 起動
```bash
$ cd /vagrant/rails/rails-test/
$ bundle exec rails s
```


この状態でwindowsのブラウザから、localhost:13000 にアクセスすればいつものrailsの初期画面が表示されます。

![rails-top.png](https://qiita-image-store.s3.amazonaws.com/0/7902/bb937575-b218-ce9b-c821-ca3c205299af.png)

参考)
[Rvm-seppuku](http://serihiro.org/blog/2014/07/15/rvm-seppuku/)