🛝

KamalでデプロイしたRailsとPosgreSQLのアプリでデータベース管理

に公開

RailsとPosgreSQLで構成されるアプリをKamalでデプロイしました。

https://zenn.dev/kaorumori/articles/6e34284ea51961

PostgreSQLのデータベース管理をしていきます。

rake db コマンドの実行

rakeコマンドでデータベースを管理する際には以下のように実行します。

kamal app exec -i 'bundle exec rake db:seed'

ただし、RailsアプリがPostgreSQLに接続している状態なので、以下のようなrake db:migrate:resetは実行することができません。

kamal app exec -i 'bundle exec rake db:migrate:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1'

psqlでデータベースに接続

シェルにログインします。この場合のログイン先はRailsアプリが稼働しているコンテナです。

kamal app exec -i --reuse "bash"

psqlでPostgreSQLに接続します。

psql -U dbuser -d appname_production -h appname-db

ダンプファイルからデータベースをリストア

SFTPなどを利用してVPSにPostgreSQLデータベースのダンプファイルを転送します。

VPSにSSHでログインして/var/lib/docker/volumes/<YOUR_APPNAME>/_data以下にダンプファイルをコピーします。

ローカルの開発環境からRailsアプリが稼働しているコンテナのシェルにログインします。

kamal app exec -i --reuse "bash"

そうするとstorageディレクトリにさきほどのダンプファイルがあるので、そのダンプファイルを指定してリストアします。

pg_restore --clean --no-acl --no-owner -h <YOUR_APPNAME>-db -U <DBUSER> -d <DBNAME> /rails/storage/<DUMPFILE>

Discussion