CentOS 7.5にRuby on Railsチュートリアルの環境を構築する

Ruby on Railsチュートリアルを読み進めるための開発環境を、Vagrant+VirtualhostのゲストOS上で構築する。

ゲストOSはCentOS 7.5。

```
$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
```

# ruby 2.4のインストール

ruby 2.4をインストールするため、SCL(Software Collections)を導入する。

yumのリポジトリを管理するためにyum-utilsをインストールし、

```
$ sudo yum install -y yum-utils
```

SCLをインストールする。

```
$ sudo yum install -y centos-release-scl
```

そして、SCLのリポジトリを有効化する。

```
$ sudo yum-config-manager --enable rhel-server-rhscl-7-rpms
```

SCLを有効にしたら、ruby2.4をインストールする。

```
$ sudo yum install -y rh-ruby24 rh-ruby24-ruby-devel
```

SCLで管理するパッケージは、インストールしただけでは利用できない。
利用するには、`scl`コマンドから実行しなければならない。

```
$ scl enable rh-ruby24 'ruby --version'
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-linux]
```

毎回このコマンドを使用するのは面倒なので、ログイン時にsclを有効になるようにbashrcを設定する。

```
$ cat ~/.bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

source scl_source enable rh-ruby24
```

最後の行の

```
source scl_source enable rh-ruby24
```

これがsclを有効にする設定。こうするとログインすると

```
$ ruby --version
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-linux]
```

`scl`コマンド無しで、rubyを利用できる。

# パッケージの追加インストール

railsやgemのパッケージで必要になるライブラリをインストールする。

- zlib-devel
- sqlite-devel

```
$ sudo yum install -y zlib-devel sqlite-devel
```

# Node.jsのインストール

railsで使用するExecJSはJavaScriptのランタイムが必要である。
ランタイムがない状態で実行すると

```
$ rails server
/home/vagrant/.gem/ruby/gems/execjs-2.7.0/lib/execjs/runtimes.rb:58:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
...
```

このようなエラーが発生して、`rails server`が実行できない。
ここでは、サポートされているランタイムの中からNode.jsをインストールする。

## パッケージのインストール

Node.jsに必要なパッケージをインストールする。

```
$ sudo yum install -y gcc-c++ make
```

## yumリポジトリの追加

Node.js 10.15.0 LTSをyumでインストールするため、リポジトリを追加する。

```
curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
```

## Node.jsのインストール

yumを使ってNode.jsをインストールする。

```
sudo yum install -y nodejs
```

インストールできたら、バージョンを確認する。

```
$ node -v
v10.15.0
$ npm -v
6.4.1
```

# ポートの設定

`rails server`で使用するポートを開けて、ホスト上のブラウザで確認できるようにする。
ここでは`rails server`のデフォルトの3000を開ける。

## Vagrantの設定

Vagrantfileでポートフォワーディングを有効にして

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

設定を適用する。

```
$ vagrant reload
```

## CentOSの設定

`firewall-cmd`でpublicゾーンにポート3000/tcpを登録し

```
$ sudo firewall-cmd --zone=public --add-port=3000/tcp --permanent
```

設定を適用する。

```
$ sudo firewall-cmd --reload
```

## 設定の確認

設定が終わったら、実際に`rails server`を実行して確認する。

```
$ rails server
=> Booting Puma
=> Rails 5.1.6.1 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.0 (ruby 2.4.3-p205), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
```

ゲストOSで`rails server`を実行して、ホストOSのブラウザから http://localhost:3000/ にアクセスし、railsのページが表示されることを確認する。

# 参考

- [Software Collections — Software Collections](https://www.softwarecollections.org/en/)
- [Ruby 2.4 — Software Collections](https://www.softwarecollections.org/en/scls/rhscl/rh-ruby24/)
- [Red Hat Software Collection を再起動またはログアウト後も持続させる](https://access.redhat.com/ja/solutions/2112231)
- [CentOS7.2でruby2.2.2をインストールする - Qiita](https://qiita.com/U_ikki/items/ddcd9f11c129636ed6e7)
- [CentOS 7.2にNode.jsをインストールする - Qiita](https://qiita.com/te2u/items/ee8391842397da381e23)
- [distributions/README.md at master · nodesource/distributions · GitHub](https://github.com/nodesource/distributions/blob/master/README.md#rpminstall)