Cloud services

新しいItemの作成

Items

最新コメント

HerokuでDBのアップデート等を行うときの作業の流れ

wakairo @wakairo
最終更新

PostgreSQLのメジャーバージョンを上げるときなど、通常のデータの読み書きとは異なる更新をDBに対して行うことがあります。

ここではHerokuの公式ドキュメントである「Heroku Postgres データベースのバージョンのアップグレード」を参考に、このようなアップデート等の変更をDBに行うときの大まかな流れをご紹介します。

DBにアップデート等の変更を行うときの作業の流れ

新たなDBを作成する

メジャーバージョンを上げるといった大きな更新をするときには、 何かあったときにすぐに戻せるよう、元のDBには手を入れずそのままにして温存します。 代わりに、addons:createコマンドなどで、大きな更新を行う別の新たなDBを作成します。

DBへの書き込みを停止させて、データを完璧に複製する

addons:createコマンドの--followオプションやpg:copyコマンドを利用して、 元のDBから新たなDBにデータをコピーします。 この際、適切にアプリをメンテナンスモードにするなどして、元のDBへの書き込みを停止させ、 停止している間に元のDBのデータの全てが新たなDBに複製されている状態にします。

ちなみに、公式ドキュメントには記載がありませんが、 バックアップが短時間で終わるデータの規模であるならば、 トラブルに備えてこの書き込みが停止しているタイミングで元のDBのバックアップを手動で作成しても良いように思います。

新たなDBに手を加える

メジャーバージョンの更新などの必要があれば、新たなDBに手を加えます。

アプリの接続先を元のDBから新たなDBに切り替える

pg:promoteコマンドを利用して、アプリが読み書きする対象を新たなDBに切り替えます。

アプリを公開してテストする

メンテナンスモードを解除するなどして、アプリを公開状態に戻します。 本番環境が問題なく動いているかテストを行います。 何かしら問題がある場合には、アプリの接続先を元のDBに迅速に戻すことで、被害が最小化できるはずです。

不要になったDBを削除する

元のDBなどが不要になった場合など、addons:destroyコマンドなどを利用して、不要になったDBを削除します。

(参考)ステージングアプリを利用したテスト

より安全にDBの更新などを行うために、本番のアプリのDBを更新する前に、ステージングのアプリでDBの更新をテストすることも可能です。詳細はPostgreSQL メジャーバージョンのアップグレードのテストをご覧ください。

0
Raw
https://www.techtips.page/ja/comments/318
❤️1

Herokuでは環境変数DATABASE_URLを使ってrailsアプリが接続するDBの設定を行っている

wakairo @wakairo
最終更新

railsのDB接続設定では、環境変数DATABASE_URLの情報が優先されます

Herokuでは、環境変数DATABASE_URLへの設定を通してDB設定が行れています。また、このDB設定(つまり、DATABASE_URLの値)を変更したいときにはheroku pg:promote​コマンドを用います。

なお、環境変数DATABASE_URLの現在の設定値はheroku configコマンドで確認できます。

0
Raw
https://www.techtips.page/ja/comments/317

Heroku CLIをaptでインストールすると自動更新されない

wakairo @wakairo

2024年9月現在、UbuntuやDebianでapt-getを使ってインストールしたHeroku CLIは自動更新されなくなっています。具体的には、単純にsudo apt-get upgradeを走らせるだけでは、最新版になりませんでした。昔はこのコマンドで最新版に更新されたと思うのですが。

https://devcenter.heroku.com/ja/articles/heroku-cli#install-with-ubuntu-debian-apt-get には以下の記述があります。

このバージョンでは、自動更新を行いません。apt-get​を使用して手動で更新してください。

そして、自動更新をして欲しい場合には、tar 書庫によるスタンドアロンインストールを使えば良いそうです。ということで、特に事情がない分には、今後はこちらのスタンドアロンインストール版の方が便利そうです。

0
Raw
https://www.techtips.page/ja/comments/315
😄1
🔧1