VagrantでRuby on Railsの環境を構築する

Vagrant上にてRuby on Railsの環境を立てましたのでメモ。
例によって参考そのままだとどうにもうまく行かなかったので、
自分なりにアレンジした、まとめのまとめです。

# 環境
Mac OSX High sierra
Cent OS7
Ruby （2.5.1）
Rails （5.2.0）

※virtualbox, vagrantは事前にインストールされているものとします。

# CentOS7インストール
今回は~/railsというディレクトリを作り、そこにインストールしています。

```console:console
$ cd ~/rails/
$ vagrant box add centos7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos7' (v0) for provider: 
    box: Downloading: https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
==> box: Successfully added box 'centos7' (v0) for 'virtualbox'!
$ vagrant init centos7
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
```

# Vagrantfile編集
```console:console
$ vi Vagrantfile
```
以下のコメントを外します

```console:Vagrantfile
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "private_network", ip: "192.168.33.10"
```
IPアドレスが被ってしまう場合には変更して構いません。（私は変えました）

# 仮想環境起動
reloadいらんかったか。

```console:console
$ vagrant reload
==> default: VM not created. Moving on...
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
（以下略）
```
vagrant sshで入ります。

```console:console
$ vagrant ssh
```

慎重に行くなら、この時点で別のターミナルを立ち上げてpingを打って指定IPアドレスで仮想環境が動いているか確かめておくといいでしょう。

# RubyとRailsのインストール

古いRubyの削除

```console:console
$ ruby -v
ruby 2.0.0p598 (2014-11-13) [x86_64-linux]
$ sudo yum -y remove ruby
```

yumのアップデート

```console:console
$ sudo yum update
```

firewall停止

```console:console
$ sudo systemctl stop firewalld
$ sudo systemctl mask firewalld
Created symlink from /etc/systemd/system/firewalld.service to /dev/null.
```

gitインストール

```console:console
$ sudo yum -y install git
```

rbenvインストール

```console:console
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
Cloning into '/home/vagrant/.rbenv'...
remote: Counting objects: 2737, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 2737 (delta 11), reused 17 (delta 10), pack-reused 2714
Receiving objects: 100% (2737/2737), 518.23 KiB | 114.00 KiB/s, done.
Resolving deltas: 100% (1711/1711), done.

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ 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/.local/bin:$HOME/bin

export PATH
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

$ source ~/.bash_profile
```

バージョン確認

```console:console
$ rbenv --version
rbenv 1.1.1-37-g1c772d5
```

Rubyインストール

```console:console
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
Cloning into '/home/vagrant/.rbenv/plugins/ruby-build'...
remote: Counting objects: 8905, done.
remote: Compressing objects: 100% (49/49), done.
remote: Total 8905 (delta 25), reused 45 (delta 8), pack-reused 8843
Receiving objects: 100% (8905/8905), 1.86 MiB | 862.00 KiB/s, done.
Resolving deltas: 100% (5721/5721), done.

$ rbenv install 2.5.1
Downloading ruby-2.5.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.bz2
Installing ruby-2.5.1...
Installed ruby-2.5.1 to /home/vagrant/.rbenv/versions/2.5.1

$ rbenv global 2.5.1
```

Railsインストール

```console:console
$ rbenv exec gem install bundler
Fetching: bundler-1.16.2.gem (100%)
Successfully installed bundler-1.16.2
Parsing documentation for bundler-1.16.2
Installing ri documentation for bundler-1.16.2
Done installing documentation for bundler after 2 seconds
1 gem installed

$ rbenv rehash
$ gem search -r rails | grep "^rails ("
rails (5.2.0)
$ gem install rails
Fetching: concurrent-ruby-1.0.5.gem (100%)
（以下略）
```

# プロジェクト作成、起動

```console:console
$ rails new hoge
（中略）
* bin/rake: spring inserted
* bin/rails: spring inserted

$ cd hoge
$ rails s -b 0.0.0.0
```

成功すれば以下のようになります。
Ctrl+Cするまでサーバー起動するって事ですね。それまでプロンプト戻ってきませんが大丈夫。

```console:console
=> Booting Puma
=> Rails 5.2.0 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
```

ブラウザではlocalhost:3000か192.168.33.10:3000でアクセスできます。

# エラー類
## rails sでThere was an error while trying to load the gem 'uglifier'

調べるとtherubyracerなるものが必要とありました。

```console:console
vi Gemfile
```

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

参考先ではコメントを外すよう言われていたのですが、筆者の場合therubyracerがなく
mini_racerがあるのみでしたので、上記の行をそのまま追加しました。
ちなみにmini_racerはエラーが出てうまくインストールできませんでした。

入れたら再度パッケージをインストールします。

```console:console
$ bundle install
```



# 参考
https://qiita.com/yafuu822/items/2774b45b166d0c9a4e2d
https://qiita.com/ave/items/650ef08c3e4261cf62bc
https://qiita.com/pugiemonn/items/11a2bc8403e5947a8f13
https://qiita.com/kosukeKK/items/940bcd2e47a76fc5b801