ローカル環境のdbをfly.ioのdbに移行する

無料枠のfly.ioだと、rails db:seedを実行した時メモリが不足しているようで途中で止まってしまうので ローカル環境のdbの内容を移行することにしてみました。

postgreSQLのコンテナの中でpostgresユーザーに切り替えた後に、pg_dumpコマンドでデータベースのバックアップを取得します。

docker exec -it <PostgreSQLのcontainer id> bash
su - postgres
pg_dump myapp_development > myapp_development.dump
exit
exit

docker cpコマンドで取得したバックアップをホスト環境に持ってきます。

docker cp  <PostgreSQLのcontainer id>:/var/lib/postgresql/myapp_development.dump myapp_development.dump

fly proxyコマンドを実行するとpsqlコマンドでfly.ioのPostgreSQLに接続できるようになるようになるみたいです。

fly proxy 15432:5432 -a <postgres-app-name>

fly proxyコマンドを実行したら別ターミナルからpsql -fコマンドで取得したバックアップファイルを実行します。

psql postgres://{username}:{password}@localhost:15432 -f myapp_development.dump

usernameとpassowrdは環境変数DATABASE_URLを見ることで確認できると思います。

fly ssh console
env | grep DATABASE_URL

最後にar_internal_metadataテーブルのvalueがdevelopmentとなっているのでproductionに変えておくといいと思います。

fly postgres connect -a <postgres-app-name>
\c db名
delete from ar_internal_metadata where key = 'schema_sha1';
update ar_internal_metadata set value = 'production' where key = 'environment';