【RDS/Rails】Railsサーバ（AWS Cloud9で構築）とRDS（MySQL）間の接続を確立する

##目標
Railsサーバ（AWS Cloud9によって構築）とRDS（MySQL）間の接続を確立する

##はじめに
ほぼメモです。
Railsはデフォルトでsqlliteをデータベースとして利用する設定になっているので、
それをRDSで構築したMySQLを利用するよう設定変更しました。

##前提
・RailsサーバがCloud9によって構築済みであること（※）。

※以下記事の「Cloud９にチャレンジ！」までを実施する
[[初心者向け]Cloud9で五分でできる、"Yay! You’re on Rails!"（Cloud９にチャレンジ！）](https://qiita.com/Kouch/items/26330d544b5d815986bb#cloud%EF%BC%99%E3%81%AB%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8)

##作業の流れ
| 項番 | タイトル |
|:----:|:-------------|
| 1 | [RDSを構築する](#1rdsを構築する) |
| 2 | [Railsサーバから接続する](#2railsサーバから接続する)|

##手順
###1.RDSを構築する
以下記事の「1.RDSを作成する」を実施します。

[【RDS】EC2とRDS(MySQL)間の接続を確立する（1.RDSを作成する）](https://qiita.com/aWdfcfG2jLr73pe/items/0fc95a6b865f6bb89179#1rds%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)


###2.Railsサーバから接続する
**①Railsの新規アプリケーション作成**

```bash

$ rails new test_app
```

作成後、アプリケーション配下へ移動します。

```bash

$ cd test_app
```

**②mysql-develをyumインストール**

```bash

$ sudo yum install mysql-devel
```

**③Gemfile編集**

デフォルトでsqlliteのgemをインストールする仕様となっているので、
mysqlをインストールするよう以下のように編集します。

`gem 'sqlite3'`⇒コメントアウト
`gem 'mysql2'`⇒追加

```bash

ファイル名：　Gemfile
```

```bash

#gem 'sqlite3'
gem 'mysql2'
```

**④MySQLのgemインストール（bundle install）**

```bash

$ bundle install
```

**⑤database.yml編集**
development環境にmysqlのデータベースを利用するよう`database.yml`を編集（デフォルトのsqlliteへの接続定義は上書き削除）（※）

※以下に関しては値を置換する必要があります。
`<db_username>`、`<db_password>`、`<rds_endpoint>`
⇒前手順「1.RDSを構築する」で構築したRDSの内容に従って書き換え

`<db_name>`
⇒任意の名前でOK。


```bash

ファイル名：　database.yml
```

```bash

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <db_username>
  password: <db_password>
  host: <rds_endpoint>
  database: <db_name>
  socket: /var/lib/mysql/mysql.sock

development:
  <<: *default
```

**⑥データベース作成**

```bash

$ rails db:create
```

**⑦アプリケーション起動**

```bash

rails s
```

**⑧検証テーブル作成**


```bash

$ rails generate model user name:string
```

```bash

$ rails db:migrate
```

**⑨Mysql接続**
`mysql -h <rds_endpoint> -u <db_username> -p <db_name>`


```bash

$ mysql -h database-test.cgfjapta11py.ap-northeast-1.rds.amazonaws.com -u admin -p practice
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 5.7.22-log Source distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
```

接続後、一応データベース及びテーブルが正常に作成されているか確認
`show databases;`
`show tables;`

```bash

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| mysql              |
| performance_schema |
| practice           |
| sys                |
| testdb             |
+--------------------+
7 rows in set (0.00 sec)

mysql> show tables;
+----------------------+
| Tables_in_practice   |
+----------------------+
| ar_internal_metadata |
| schema_migrations    |
| users                |
+----------------------+
3 rows in set (0.00 sec)
```