👾

[ Docker + Rails ] Mysql2 から PostgreSQLへ以降する

2022/07/31に公開約1,500字

目的

Dockerで構築したRails + Mysql環境を PostgreSQLへ変更する。
なお今回の内容はローカル環境のみになります。

環境

ver
Ruby 3.0.3
Rails 6.1.4

流れ

  1. ローカルデータの移行
  2. 関連ファイルの編集
  3. DBユーザーのパスワードを設定

ローカルデータ

初期データとして必要なデータを移行します。
seedファイルを作成して対応します。

seedファイルのタスクを作ると便利なのですが、それについては別記事であげます。

関連ファイルの編集

以下のファイルを編集します。

  • Gemfile
  • Dockerfile
  • docker-compose.yml
  • database.yml

Gemfile

PostgreSQLのGemを追加します。

## 削除
gem 'mysql2', '~> 0.5' 
## 追記
gem 'pg' 

この状態でbundle installを行うと必要なライブラリが足りないため、エラーが起きます。

Unable to find PostgreSQL client library.
 
Please install libpq or postgresql client package like so:
  sudo apt install libpq-dev
  sudo yum install postgresql-devel
  sudo zypper in postgresql-devel
  sudo pacman -S postgresql-libs

Dockerfile

必要なライブラリ postgresql-dev をインストールします。

exmple

RUN apk update \
      && apk add --no-cache ... postgresql-dev

docker-compose.yml

使用するimageとvolumesを変更し、ユーザー情報を渡します。
bolumeを変更しなかった場合にエラーが発生するため、
以下のように変更するか、Mysqlの時に使用していたvolumesを削除する必要があります。

  db:
    image: postgres:14
    ...
    volumes:
      - db:/var/lib/postgresql/data
    environment:
        - POSTGRES_USER=${DB_USER}
        - POSTGRES_PASSWORD=${DB_PASSWORD}

database.yml

adpterを変更します。

default: &default
  adapter: postgresql
  ...
  

DBユーザーのパスワードを設定

ユーザーのパスワードを設定します。

$ docker-compose exec db bash

$ su - postgres

$ psql

$ ALTER USER postgres PASSWORD 'password'

以上の内容を行い、正しくDBに接続できれば作業終了です。

Discussion

ログインするとコメントできます