Herokuを使ったアプリケーションのサービスを二つ運用している.毎月十数ドルの利用料を払っているが,いずれも多数の皆さんに利用していただいているので,利用料を払っているだけの価値は得られているだろう.
数年前からずっと利用しているサービスなので,以前から,「使っているスタックをアップグレードせいやー」という連絡を受けていた.スタックというのは,アプリケーションを動かすプラットフォームのことである.これまで,heroku-20と名前の付いているスタックを使用していたが,そのスタック利用期限が今月末,4日後の4月30日だというのだ.
もちろん,ほったらかしておいたらすぐに使えなくなってしまうわけではない.利用だけであれば,このままで,まだ使えるとのこと.ただし,セキュリティ対応やさまざまなサービスは打ち切られる.また,致命的なのは,利用期限を超えたスタックを使っている場合,コードの変更やアップデートができなくなる,という制限である.これは,ちと,まずい.
スタックのアップグレード
というわけで,ようやくお尻に火がついた私は,重い腰を上げてスタックのアップグレード作業に着手したのだった.
結論からいうと,終わってみればなんということはなく,あっけなくアップグレードは終了した.ウェブサイトの指示に従い,次の手順でアップグレードすれば,ほぼ,問題なく終了する.
- 新しいスタックの環境を作り,スタックを更新してきちんと動作するかどうかのテスト用アプリをデプロイする,
- そのアプリが正しく稼働するか,ソースコードをアップロードして起動してみる,
- 問題なく動くことを確認できたら,テスト用アプリを削除して,本番環境のスタックをアップグレードする
いくつか説明通りにいかないところがあって試行錯誤しながらではあったが,無事,heroku-22にアップグレードできた.ついでに,というか,勢い余って現在の最新版であるheroku-24にまで上げてしまった.これでしばらくはアップグレード問題に悩まされることはなくなるはずである.
躓いたポイント
ウェブサイトの説明に従ってやったらほぼ問題なくできたが,いくつか躓いた点があるのでそれも紹介しておこう.
まず,説明通りにやったらうまく動かなかった.テストアプリを立ち上げて「ダメでっせ」という画面が出ていたときの,嗚呼,落胆たるや,いかほどばかりであっただろうか.世の中うまくいかんもんよなあと,日頃の行いをしばし反省である.
うまく動かんときはログを見よという指南があったので,ログをみたら「データベースにそんな関係は定義されていない」というエラーが出ていた.なんのことはない,よけいなデータベースを作って参照していただけという問題だった.
説明では,addonsの一覧を表示させて使っているaddonsを調査してそれらををcreateせよとあり,その説明に素直に従ったため,不必要なデータベースを新しくもう一つ作ってしまっていたわけだ.当然ながら新しいデータベースは何のテーブルも定義されていないので,そのままだとエラーになる.
作ったaddonsデータベースをremoveしてから,既存のデータベースをaddons:attachすれば,問題なく現状のデータで動いた.逆に,いま使ってるデータをアップグレードしたスタックのテストアプリからそのまま使えたので,データベースがアプリから切り離されていることのメリットを感じた瞬間でもある.いろいろ更新したアプリから,そのまま,何もなかったかのようにデータを弄れたのには,頭ではわかっていても「おおすごい」と思ったものである.
あともう一つ,コードのデプロイに git push heroku main という呪文を唱えるのだが,これが何度やってもエラーになる.「そんなリポジトリない」というようなエラーである.はて?と思って,ふと,気付いたのは,mainじゃなくてmasterだよ,ということ.最初に作ったのはだいぶ前であり,「masterはPC的にけしからん,mainを使え!」とよくわからないムーブメントが起こる前であった.それをすっかり忘れていた.git push heroku master とやったら,問題なく処理できた.