さくらVPSでCentOS7 １０．Ruby On Railsインストール

#はじめに
自由にテスト出来るLinuxのサーバーがほしくて、さくらVPSで構築してみました。
順次手順をアップしていく予定です。

今回は、Ruby On Railsをインストールします。
どういった構成が正解かは判断がつきかねているのですが、今のところこんな感じです・・(^^;

#目次

1. [申し込み](https://qiita.com/Qsugi/items/9239f93f35967e567b5b)
2. [CentOS7インストール](https://qiita.com/Qsugi/items/4cc4ba9983191a306b19)
3. [SSH接続](https://qiita.com/Qsugi/items/45772c8a71a31bd0d3c8)
4. [Apache・PHPインストール](https://qiita.com/Qsugi/items/bf9740f31b4c42eaad91)
5. [MariaDBインストール](https://qiita.com/Qsugi/items/7798669338b555f4ea8d)
6. [FTP接続](https://qiita.com/Qsugi/items/6f383694f60913abb948)
7. [sftp接続](https://qiita.com/Qsugi/items/a8328a116218b058a8bf)
8. [phpMyAdminインストール](https://qiita.com/Qsugi/items/8b6f5b457285140b2ca2)
9. [環境のバックアップ](https://qiita.com/Qsugi/items/a83076eb657157f12f17)
10. Ruby On Railsインストール
11. [RailsプロジェクトをGitで共同開発](https://qiita.com/Qsugi/items/3c31cfeffee288c05d5e)

#１０．Ruby On Railsインストール
##必要パッケージインストール

###Node.jsインストール
Node.jsのバージョンを管理する「n」パッケージをインストールします。
鶏と卵のような話ですが、「n」パッケージインストールにはnpmが必要で、npmにはNode.jsが必要ということで、Node.jsをインストールする為にまずnpmとNode.jsをインストールします。

####npmインストール

```
$ sudo yum install epel-release
```

####node.jsインストール

```
$ sudo yum install nodejs npm
```

####「n」パッケージインストール

```
$ sudo npm install -g n
```

####「n」パッケージを使ってNode.jsをインストール
最新版は「latest」、安定版は「stable」でインストールできます。

```
$ sudo n latest
$ node -v
v11.13.0
```

```
$ sudo n stable
$ node -v
v10.15.3
```

####「n」パッケージの使い方

|コマンド|内容
|:--|:--|
| n | インストールしているバージョンの表示やバージョンを切り替える |
| n ls | すべてのバージョンを表示する |
| n --latest | 最新バージョンを表示する |
| n --lts | 安定バージョンを表示する |
| n latest | 最新バージョンをインストールする |
| n stable | 安定バージョンをインストールする |
| n [version] | 指定したバージョンをインストールする |
| n rm [version] | 指定したバージョンを削除する |
| n prune | すべてのバージョンを削除する |

### その他もろもろインストール

```
$ sudo yum -y install gcc make openssl openssl-devel gcc-c++ mysql-devel readline-devel libxml2-devel libxslt-devel git bzip2 zlib-devel sqlite-devel
```

```
$ sudo npm install yarn -g
```

##Rubyインストール
###rbenvインストール
rbenvは、複数のRubyのバージョンを管理し、プロジェクトごとにRubyのバージョンを指定して使うことを可能としてくれるツールです。
まずこれをインストールします。

```
$ cd /usr/local
$ sudo git clone https://github.com/rbenv/rbenv.git
$ sudo mkdir rbenv/plugins && cd rbenv/plugins
$ sudo git clone git://github.com/sstephenson/ruby-build.git
```

ログイン時にrbenvを使えるようにする初期化スクリプトを記述します。

```
$ sudo vi /etc/profile.d/rbenv.sh
```

以下を追加

```
export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
```

パーミッションの変更

```
$ sudo chmod -R 777 /usr/local/rbenv
```

設定を反映させるために、ここで一度ログアウトして再ログインします。
再ログインしたら、確認。

```
$ rbenv install -l
2.6.5
```

###Rubyインストール
rbenvを使ってRubyをインストールします。
インストール可能なRubyバージョン一覧を表示します。

```
$ rbenv install -l
```

バージョン2.6.5のRubyをインストールします。

```
$ rbenv install 2.6.5
```

全体で使用するRubyのバージョンを指定

```
$ rbenv global 2.6.5
```

確認

```
$ ruby --version
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
```

##Rails環境構築
###GemとBundler
GemはRubyGems（Ruby用のパッケージ管理ツール）で管理されるrubyのアプリケーションやライブラリです。
Bundlerは、gem動詞の互換性を保ちながらパッケージの種類やバージョンを管理するツールです。

####gem
確認

```
$ which gem
/usr/local/rbenv/shims/gem
```

最新版にアップデート

```
$ gem update --system
```

バージョン確認

```
$ gem -v
3.0.6
```

####bundlerインストール

システムのgemにはbundlreのみインストールし、bundler以外のものはプロジェクトのvendor/bundleに格納します。
ので、ここではbundlerのみインストール。

```
$ gem install bundler
```

###プロジェクトのフォルダ

以前、[4. Apache・PHPインストール](https://qiita.com/Qsugi/items/bf9740f31b4c42eaad91)でApacheをインストールした時に作成した、/var/www/の中にappというフォルダを作成し、その中にプロジェクトを作っていきます。

フォルダ作成

```
$ mkdir /var/www/app
```

Webコンテンツに複数のユーザが操作出来るように作成したグループに権限を与えます。

```
$ sudo chown root:webadmin /var/www/app/
$ sudo chmod 2775 /var/www/app/ -R
```

###「bundle exec」の省略設定
railsコマンドをプロジェクト内のvendor/bundleに格納すると、railsコマンド呼出時に、「bundle exec rails server」のように「bundle exec」を付けて呼び出す必要があります。
このbundle execを省略できるように設定します。
この設定は、各ユーザーごとに必要です。

スクリプトをダウンロード

```
$ cd
$ curl -L https://github.com/gma/bundler-exec/raw/master/bundler-exec.sh > ~/.bundler-exec.sh
```

bundler-exec.shを編集

```
$ vi ~/.bundler-exec.sh
```

リストにrailsを追記（下の方にあります）

```
  ・
  ・
 (省略）
  ・
  ・
unicorn
unicorn_rails
wagon
rails
}"

define-bundler-aliases

unset -f define-bundler-aliases
```

反映させます。

```
$ source ~/.bashrc
```

###利用可能なRailsのバージョンの確認

```
$ gem query -ra -n "^rails$"
```

現時点で最新は6.0.1でしたが、以下のプロジェクトでは5.2.4を使います。


##プロジェクト作成

###プロジェクト用フォルダ
bundlerを利用する為、「rails new 」する前に、フォルダを作成します。

```
$ mkdir /var/www/app/HelloWorld
$ cd /var/www/app/HelloWorld
```

ローカルのrubyのバージョンを指定。

```
$ rbenv local 2.6.5
```

確認

```
$ rbenv version
2.6.5 (set by /var/www/app/HelloWorld/.ruby-version)
```

###Gemfile

Gemfileの雛形作成

```
$ bundle init
riting new Gemfile to /var/www/app/HelloWorld/Gemfile
```

Gemfileの編集

```
$ vi Gemfile
```

railsのバージョン5.2.4を使用できるように下記のように修正します。

```
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

# コメントを外し、バージョンを記述
gem "rails", "5.2.4"
```

###gemのインストール

```
$ bundle install --path vendor/bundle
```

インストールのメッセージが流れ、無事に終わるかと思ったのですが、こんなメッセージが・・・

```
HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.

Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.

For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0
```

「i18nの設定方法が変わったので気を付けなさい」ということみたいです。
だだ、今回はRailsのバージョン5.2.4にしていますので、I18n (>= 1.1.0) and Rails (< 5.2.2)の条件には引っ掛からないので大丈夫だと思います。

###新規プロジェクト作成
これでやっとrailsコマンドが使えるようになりましたので、プロジェクトを作成します。
フォルダは作成済みですので、プロジェクト名の指定は不要です。

```
$ rails new .
```

.ruby-versionを上書きしますか？と聞いてきますのでYを入力。

```
Overwrite /var/www/app/HelloWorld/.ruby-version? (enter "h" for help) [Ynaqdhm]Y
```

Gemfileを上書しますか？と聞いてきますのでYを入力。

```
Overwrite /var/www/app/HelloWorld/Gemfile? (enter "h" for help) [Ynaqdhm]Y
```

順調に行くと思いきや、以下のメッセージが出ました。

```
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Bundler could not find compatible versions for gem "sprockets":
  In snapshot (Gemfile.lock):
    sprockets (= 4.0.0)

  In Gemfile:
    sass-rails (~> 5.0) was resolved to 5.1.0, which depends on
      sprockets (>= 2.8, < 4.0)

    rails (~> 5.2.4) was resolved to 5.2.4, which depends on
      sprockets-rails (>= 2.0.0) was resolved to 3.2.1, which depends on
        sprockets (>= 3.0.0)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
         run  bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with `bundle install`
```

依存関係に問題があるから、「bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java」を実行しろということのようです。
あと、「bundle update」を実行すると、スナップショットを最初から再構築します、と。
なので、やってみます。

```
$ bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies......
Bundler could not find compatible versions for gem "sprockets":
  In snapshot (Gemfile.lock):
    sprockets (= 4.0.0)

  In Gemfile:
    sass-rails (~> 5.0) was resolved to 5.1.0, which depends on
      sprockets (>= 2.8, < 4.0)

    rails (~> 5.2.4) was resolved to 5.2.4, which depends on
      sprockets-rails (>= 2.0.0) was resolved to 3.2.1, which depends on
        sprockets (>= 3.0.0)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
```

```
$ bundle update
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
　・
　・
（以下略）
　・
　・
```

と、同じようなメッセージが・・・
とりあえず、再度「bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java」して、「bundle update」すると、「Bundle updated!」と出たので、とりあえずOKかなと。

##サーバー起動
###3000のポートを開ける
####ファイアウォールを使っている場合
ポートを開ける

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

####さくらVPSのパケットフィルタを使っている場合

1. さくらVPSコントロールパネルにログインし、サーバーを選択
2. [パケットフィルタ]-[パケットフィルタ設定へ>]を選択
3. [+任意の解放ポート設定を追加する]ボタンをクリック
4. [TCP][3000]を設定
5. [設定]ボタンをクリック

<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/affe2956-cd4e-2fad-d6c3-ca84dbf54dcb.png" width=600>
以上でポートが開きます。

###サーバー起動

```
$ rails server -b 0.0.0.0
=> Booting Puma
=> Rails 5.2.4 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.5-p114), 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
```

無事起動しました。

###ブラウザで確認
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/832da8ae-da14-8a94-f89a-dc63312e3359.png" width=600>

#次回

前回：[Ruby On Railsインストール](https://qiita.com/Qsugi/items/c7e69a6761f125846bff)
次回：[RailsプロジェクトをGitで共同開発](https://qiita.com/Qsugi/items/3c31cfeffee288c05d5e)