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