前回は、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アプリが表示された!
 
