HEROKUでRailsアプリを新スタックに移行作業したときのメモです。次の移行作業は数年後になりそうなので忘れないようにメモしておきます。数年後に有効かどうかはわかりませんが。
ビルドに失敗してよくわからなくなったので、実際の作業はHEROKU上の設定をすべて削除して新規作成、デプロイメントしてしまいました。そのため、すべての手順を検証はしていないです。
準備
今回は特に何もしなかったのですがバックアップ等必要に応じてしたほうが良いでしょう。あとHEROKU CLIのプラグイン、Heroku Buildsを入れておくと何かと助かるかもしれません。フリーズした場合、ビルドをキャンセルしたいときに役に立つかもしれません。
移行手順
- 旧スタックをメンテナンスモードに設定
- 新スタックにアプリ作成
- 新スタックにPostgresqlアドオン追加
- DBのデータをコピー
- 新スタックにデプロイメント
- 旧スタックの削除
旧スタックをメンテナンスモードに設定
ダッシュボード等からアプリをメンテナンスモードに設定しておきます。作業中の不要なアクセスを避けられます。
新スタックにアプリ作成
Heroku-18に移行する場合の手順になります。
$ cd [project-directory]
$ heroku create --remote heroku-18 --stack heroku-18 [app-name]
$ heroku buildpacks:add --index 1 --remote heroku-18 heroku/jvm
$ heroku buildpacks:add --remote heroku-18 heroku/ruby
環境変数等設定が必要であればheroku config:setコマンドで設定しておく。
新スタックにPostgresqlアドオン追加
このあたりはオプションのはず。DBは同じものを使い続けられたと思いますが新しくしてもよければ新規作成する。
$ heroku addons:create heroku-postgresql
DBのデータをコピー
新規にDBを作成した場合は、データの移行をしておく。必要なければスキップ。
$ heroku addons
$ heroku pg:copy [old-db] [new-db] --app [app-name]
必要かもしれない
$ heroku pg:promote [new-db]
新スタックにデプロイメント
$ git push heroku-18 master
$ heroku run rake db:create --app [app-name] # 不要かも
$ heroku run rake db:migrate --app [app-name]
旧スタックの削除
ダッシュボード等からアプリを削除しておけば良いと思います。DBも古いものは必要に応じて削除しておきます。