Herokuにデプロイ
ローカルでの動作確認ができたら、いよいよHerokuにデプロイしてみます。
まず、Heroku Postgres上にもテーブルを作成する必要があるので、heroku pg:psqlで入ってCREATE TABLEを実行します。
$ heroku pg:psql codezine-sample::BLUE=> CREATE TABLE message_board ( codezine-sample::BLUE=> id serial primary key, codezine-sample::BLUE=> nickname varchar(40) COLLATE "C" NOT NULL, codezine-sample::BLUE=> message text COLLATE "C" NOT NULL, codezine-sample::BLUE=> post_date timestamp default current_timestamp codezine-sample::BLUE=> );
続いてgit pushです。
$ git push heroku 03:master $ heroku open
前回はローカルのmasterブランチの内容をHerokuにpushしたので「git push heroku master」としましたが、今回は03ブランチをpushするので「git push heroku 03:master」としています。
うまくいけばHeroku上で掲示板アプリケーションを見ることができるはずです。
TimeZoneに関する注意
最後に、もう1つのハマりポイントであるTimeZoneについて説明しておきます。
HerokuもHeroku Postgresも、TimeZoneの設定はUTC(協定世界時)になっています。 一方、この記事を読んでいる人のほとんどは日本人でしょうから、OSのTimeZoneはJST(日本標準時)になっていると思います。 PostgreSQLのTimeZoneは設定次第ですが、デフォルトインストールしている場合はOS設定と同じになります。
TimeZoneの問題は関連するコンポーネントが多くなるほど厄介になりますが、ローカルでの開発に仮想環境を使う場合などは、最初からすべてUTCにしておくのがお勧めです。 それが難しい場合でも、Javaの起動オプション「-Duser.timezone」を明示するなど、対処方法はいくつかあるので、開発の早い段階で、Heroku上でも日付時刻が想定どおりに出力されていることを確認しましょう。
アプリをカスタマイズしてみよう
今回使用した掲示板アプリケーションはそれほど凝ったものではありません。 直近の20件しかメッセージを表示していませんし、メッセージの編集や削除もできません。 興味のある方は自分でカスタマイズしてみてください。
まずは、masterブランチに今回の内容(03ブランチ)をmergeします。
git checkout master git merge 03
個人で開発する場合はmasterブランチで直接作業してかまいませんが、gitを本格的に使いこなしたい人はトピックブランチを切ってそちらで開発する習慣をつけるとよいでしょう(このあたりはgitの解説書などを参照してください)。
今後もこのアプリケーションは拡張していきますが、BoardServlet.javaはもう触ることはないと思うので、コンフリクトが起こる心配はおそらくありません(Database.javaは修正するかもしれません)。
Heroku Postgres関連ではpgbackupsやDataClipなど他にも紹介したい機能があるのですが、それらはまたいずれ。
次回はアプリ開発から少し離れて、Dynoに関する説明と日常的によく使うherokuコマンドを紹介します。