前回は、RailsのネコアプリをEC2にデプロイして動かすまでを実施。
ただし、現時点では、EC2にデータベース(SQLite3)がある状態。
でも、やりたいのは、データベースはRDS(MySQL)に移したいのだ。
と、言うわけで、まずは現状のRailsネコアプリでSQLite3になっているデータベースを、ローカルでMySQL(mysql2)に変更する。
無事MySQLに変更できたら、データベース部分をRDSに繋げる、という算段だ。
今回、mysql2をインストールするにあたって、ものすごくハマったので、詳細についてはこちらの記事を参照のこと。
要約すると、mysql2とrubyのバージョンには制約があるので、正しいバージョンのgemをインストールしてくださいね、っていうのが一番のキモ。
私はこれを知らなかったので3夜(!)を費やしたけど、知っていればデータベースの変更は瞬殺。
1. rubyのバージョンを2.6.6に変更する
2. プロジェクトフォルダ直下にあるGemfileを変更する
sqlite3をコメントアウトして、代わりに mysql2 を追加するのだ。
Gemfileを編集するためにvimで立ち上げる
vim Gemfile
「i」で編集モードにする。
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
#ruby '2.7.2' コメントアウト
ruby '2.6.6' # 追加
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 6.1.1'
# Use sqlite3 as the database for Active Record
#gem 'sqlite3', '~> 1.4' コメントアウト
gem 'mysql2', '~> 0.5.3' # 追加
# Use Puma as the app server
gem 'puma', '~> 5.0'
# --- 以下略
Escキーでニュートラルモードに戻してから、「:wq」で上書き保存でvimモード終了
mysql2をインストールする
bundle install
3. config\database.ymlを変更してRDSと接続する
# SQLite. Versions 3.8.0 and up are supported.
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
#
default: &default
# adapter: sqlite3 コメントアウト
adapter: mysql2 # ここ以下追加
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
username: RDSのユーザー名
password: "RDSのパスワード"
socket: tmp/mysql.sock
host: RDSのエンドポイント名
development:
<<: *default
database: development # 何かわかりやすい名前
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: *default
database: test # 何かわかりやすい名前
production:
<<: *default
database: production # 何かわかりやすい名前
これでデータベース部分がRDSと繋がったので、下記コマンドでデータベースの準備をする
rails db:create rails db:migrate
マイグレートまで完了したら、rails s -b 0.0.0.0 でRailsサーバーを起動
RDSを使ったRailsアプリが表示された!