subtitle

RaiseTechの各種コースをはじめとしたイロイロな学習の記録

RailsのデータベースをSQLite3からMySQLに変更する(AmazonLinux2)

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