読者です 読者をやめる 読者になる 読者になる

カッパでも分かるiOSアプリゲーム開発

カッパがひたすらゲーム制作に関することを書くブログです。Railsに関するTipsもたまにまとめてます。

heroku のデータベースを有料版に変えてみたよ  公式マニュアルが恐ろしく分かりにくかった

heroku
スポンサードリンク

プロフェッショナルのための 実践Heroku入門 プラットフォーム・クラウドを活用したアプリケーション開発と運用 (書籍)

f:id:InvokeTwoA:20151023183618p:plain「攻略wikiが充実してきて、データベースの容量が限界に!」
f:id:InvokeTwoA:20151215172640p:plain「うわー、急いでアプデしなければー」

herokuは基本無料、しかしPV集まってくるとどうしても課金は避けられない宿命。

データベースの容量が近いと下記のメールが飛んでくる

The database DATABASE_URL on Heroku app game-wiki is approaching its allocated storage capacity.
The database contains 7,378 rows. The Hobby-dev plan allows a maximum of 10,000 rows. If the databases exceeds 10,000 rows then INSERT privileges will be revoked, preventing more data from being written. INSERT privileges are automatically reinstated if rows are removed and the database once again complies with the plan limit.
To avoid a disruption to your service, migrate the database to a Basic ($9/month) or higher plan:
https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups
If you are unable to upgrade the database, you should limit or reduce the number of records in it.

f:id:InvokeTwoA:20151023183618p:plain「ヒェッ」
f:id:InvokeTwoA:20151215172640p:plain「早めに連絡が来てくれて助かりますな。後でやっておくだと絶対に忘れるパターン」

とりあえず hobby-basic 9$/mon を検討してみる事に

hobby-devだと 10000 row までしか保存できなかったが
hobby-basic だと 10,000,000rowまで保存可能らしい。

なんて極端なんだ。

heroku database の変更はダッシュボードからだけでは無理

f:id:InvokeTwoA:20151023183618p:plain「さーて、金の力ですべて解決するかー」
f:id:InvokeTwoA:20151215172640p:plain「それが、ちゃんとコマンド実行とか手順を踏まないといけないのですよ」
f:id:InvokeTwoA:20151023183618p:plain「ええ、面倒くさいなー」

手順書は下記ページ。当然すべて英語
devcenter.heroku.com

f:id:InvokeTwoA:20151023183618p:plain「なんか三つの方法があるらしい」
f:id:InvokeTwoA:20151215172640p:plain「三つも!? ……最適解とかないんですかねぇ」
f:id:InvokeTwoA:20151023183618p:plain「とりあえず今回は PG copy を選ぶことにしたよ」

まずはダッシュボードから hobby-dev プランをインストール

addons.heroku.com
こちらのページからプランを選択できる。

ボタンをポチッと押せばインストール完了

下記コマンドを実行すれば新しいデータベースがインストールされた事がわかる。

heroku pg:info

すると下記のような結果が出てくる

$ heroku pg:info

=== DATABASE_URL
Plan: Hobby-dev
Status: Available
Connections: 2/20
PG Version: 9.4.8
Created: 2016-03-17 05:14 UTC
Data Size: 20.9 MB
Tables: 60
Rows: 7107/10000 (In compliance, close to row limit)
Fork/Follow: Unsupported
Rollback: Unsupported
Add-on: postgresql-hogehoge

=== HEROKU_POSTGRESQL_HOGE_URL
Plan: Hobby-basic
Status: Available
Connections: 0/20
PG Version: 9.5.3
Created: 2016-07-14 17:48 UTC
Data Size: 7.1 MB
Tables: 0
Rows: 0/10000000 (In compliance)
Fork/Follow: Unsupported
Rollback: Unsupported
Add-on: postgresql-hogehoge-hogehoge

  • DATABASE_URL というのが今まで使ってたやつ
  • HEROKU_POSTGRESQL_HOGE_URL というのが新しくインストールされたデータベース(HOGEにはGREENとか色が入るらしい)

ここからDBのコピー作業

まずはメンテナンスモードを on にする

f:id:InvokeTwoA:20151023183618p:plain「コピー中に新しいデータとか入れられたら、コピー後のデータベースに切り替えた時にデータ不整合が起きちゃう!」
f:id:InvokeTwoA:20151215172640p:plain「作業中はサーバーにユーザーがアクセスできないようにしましょう」

heroku maintenance:on

これでメンテナンス画面になる

  • コピーコマンドを実施

$ heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_HOGE_URL [master ~/work/orehata_wiki]

! WARNING: Destructive Action
! This command will remove all data from HOGE
! Data from DATABASE will then be transferred to HOGE
! This command will affect the app: app-name
! To proceed, type "app-name" or re-run this command with --confirm game-wiki

  • 確認のために app-name を打ってと言われる

f:id:InvokeTwoA:20151023183618p:plain「うわー すごい怖い怖い」
f:id:InvokeTwoA:20151215172640p:plain「こう言う心臓に悪い作業は長くやりたくないよね」

すると一瞬にしてコピー完了

  • 続いて heroku サーバーが参照するデータベースを設定

heroku pg:promote HEROKU_POSTGRESQL_HOGE_URL

データベースのコピーが完了した!

heroku pg:info
=== HEROKU_POSTGRESQL_MOGE_URL
Plan: Hobby-dev
Status: Available
Connections: 0/20
PG Version: 9.4.8
Created: 2016-03-17 05:14 UTC
Data Size: 20.9 MB
Tables: 60
Rows: 7107/10000 (In compliance, close to row limit)
Fork/Follow: Unsupported
Rollback: Unsupported
Add-on: postgresql-moge-****

=== HEROKU_POSTGRESQL_HOGE_URL, DATABASE_URL
Plan: Hobby-basic
Status: Available
Connections: 2/20
PG Version: 9.5.3
Created: 2016-07-14 17:48 UTC
Data Size: 20.3 MB
Tables: 60
Rows: 7504/10000000 (In compliance)
Fork/Follow: Unsupported
Rollback: Unsupported
Add-on: postgresql-hoge-*****

f:id:InvokeTwoA:20151023183618p:plain「切り替わってるー!」
f:id:InvokeTwoA:20151215172640p:plain「無事に終わってめでたしめでたし」