🚣

Fly.ioでデータベースを作成してRailsアプリの接続先を切り替える方法

に公開

Fly.ioでRailsアプリを運用していて、接続するデータベースを別のデータベースに切り替えることがありました。以下の手順で接続先のデータベースを切り替えることができました。

Fly.ioのPostgreSQLのパスワードを確認

SSHでログインしてechoします。

fly ssh console -a <app-name>
echo $DATABASE_URL

https://community.fly.io/t/lost-postgres-password/4192/2

既存データベースのバックアップ

既存データベースにプロキシで接続します。

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

pg_dumpで既存データベースのバックアップを作成します。

pg_dump -Fc -h localhost -p 15432 -U <dbuser> <dbname> > <dbname>.dump

接続先のデータベースを作成

fly postgres create 

データベースの接続を設定

既存データベースの接続を解除

既存データベースの接続を解除します。このコマンドの実行後から作業が完了するまではアプリが動作しなくなります。

fly postgres detach --app <app-name> <postgres-app-name>

作成したデータベースへの接続を設定

 fly postgres attach --app <app-name> <postgres-app-name>

データベースの接続文字列が表示されるので、それをアプリのsecretsに設定します。

fly secrets set DATABASE_URL='<database-url>'

データベースのリストア

接続先のデータベースにプロキシで接続します。

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

pg_restoreでデータをリストアすれば完了です。

pg_restore --clean --no-acl --no-owner -h localhost -p 15432 -U <dbuser> -d <dbname> <dbname>.dump

PostgreSQLサーバーのディスク容量を拡張

PostgreSQLのサーバーを作成すると、デフォルトのディスク容量は1GBとなっています。これを2GBに拡張する方法を調べていました。

https://fly.io/docs/reference/volumes/#extend-a-volume

以下のコマンドでディスク容量を拡張することができました。

fly volumes extend <volume id> -s 2 -a <app name>

公式ドキュメントによると、ディスク容量の拡張はできても縮小することはできないようですので、この点は注意していきたいと思います。

Discussion