2017/10/06

Heroku の Hobby プランの PostgreSQL が一杯になったので Standard にアップグレードした

Rails を使った Web application を heroku の hobby プラン(無料枠) で運用中、DBへの書き込みができなくなる。

  • $ heroku logs

を漁ると

ActiveRecord::StatementInvalid (PG::InsufficientPrivilege: ERROR:  permission denied

とある。何事だろう。
調べたら、レコードが多すぎる時に発生するらしい。

  • $ heroku pg:info

すると無料枠の 10k レコードを越えていました。
というかぴったり 10k 制限じゃないんだ。優しさなのかなんなのか。

参照した記事の場合、レコードを消して対応していました。
私の場合、レコードを消すわけにはいかないので、 hobby からの upgrade をすることにしました。


コマンド

正直なことを言えば公式のドキュメントが最強です。
指示通りでそのまま問題なくアップグレードできます。
なので、コメント付きで公式ドキュメントをなぞるくらいの気持ちでログを残します。
  • $ heroku maintenance:on
    • Application を止めます。メンテナンスモードですね。
    • おお、これは所謂「停止メンテ」だ。何が起こるか分からないのが良いですね。
  • $ heroku addons:create heroku-postgresql:standard-0
    • DB を新規に作成。プランは standard にしました。
  • $ heroku pg:wait
    • 新規作成したDBを使えるようにします。
  • $ heroku pg:info
    • を見ると DB が増えています。
  • $ heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_BLACK_URL
    • 古いDBから新しいDBにコピー。
    • DATABASE_URL は置換するとかではなく、この文字列で正しい。
    • なので postgresql-lively-12345 とかに書き換える必要は無いです。
    • 公式ドキュメントだと PINK とかだったかな。どうやらネーミングは色らしい。
  • $ heroku pg:promote HEROKU_POSTGRESQL_BLACK_URL
    • 新しい standard の方をメインのDBにセットします
    • これで DB の移行は終わり
  • $ heroku maintenance:off
    • メンテナンスモード終了
    • これで DB がアップグレードされた状態で Web Application が上がります。
流石 PaaS 。サクサクメンテができるのでインフラに手間がかからない。
ということで淡々とアップグレードができたのでした。ぱちぱち。



参考

0 件のコメント:

コメントを投稿