GrailsアプリをHerokuで公開する

Heroku とは何か?についての解説はGoogle先生に。
今日は アカウント登録から、サンプルアプリのデプロイまでをやってみます。
Grailsのバージョンは2.1.1を使用。(※1. 2012/01/03現在、ver.2.1.3はエラーとなる)

公式サイトの手順はこちら

  1. アカウントを取得する
  2. Heroku Toolbelt をインストールする
  3. アプリに Grails Heroku plugin をインストールし、BuildConfig.groovy を編集する
  4. Herokuに作成したリモートリポジトリにアプリをPush
  5. アプリを起動する

 

以下、詳細。

3.Grails プラグインインストール&設定

インストールはIDEAのGUIを使用してみた。

f:id:onBass_naga:20130102155503j:plain

この後表示される画面で Heroku Integration の [ Enable ] にチェックをいれ、[ Apply changes ] を押下する。
しばらくするとインストールが完了する。

BuidConfig.groovy の plugins に下記を追記する
(※2. 下3つを記述していなかった場合、エラーが発生した)

compile ':heroku:1.0.1'
compile ':cloud-support:1.0.8'
compile ":webxml:1.4.1"
compile ":database-session:1.1.2"

また、同ファイルの dependencies に下記を追記する
(※3. DBに接続しない場合も記述が必要)

runtime 'postgresql:postgresql:8.4-702.jdbc3'

詳しくは公式サイトを参照
修正後、ローカルのGitに commit する。


4.Deploy
コマンドプロンプトを立ち上げ、下記コマンドを実行
(Heroku Toolbelt をインストールすると heroku コマンドが使用できる)

$ heroku login


メールアドレスとパスワードを入力後、public key を作成するか聞かれるので、yを入力し作成する。

$ heroku keys:add

作成したキーを適用します。
(Herokuの公開鍵についてはこちらのサイトが詳しいです。)

$ git push heroku master


作成したHerokuのリポジトリへPush
(※4. .gitignoreを作成する際、公式手順の tailored for Grails リンク先のソースをまるまるコピペするとエラーになるので注意!)

5. アプリ起動

$ heroku open

f:id:onBass_naga:20130103085142j:plain

ヒャッハー!!Grailsアプリが起動したぜぃっ♪
(※5. 設定をしくじっているときは503エラーが発生する)

$ heroku logs


エラー時は上記コマンドでログを確認する


※1. 2012/1/3現在、Ver.2.1.3には未対応のため下記エラーが発生した。

-----> Grails 2.1.3 app detected
WARNING: The Grails buildpack is currently in Beta.
-----> Installing Grails 2.1.3.....
-----> Error installing Grails framework or unsupported Grails framework version
specified. Please review Dev Center for a list of supported versions.
! Heroku push rejected, failed to compile Grails app



※2. herokuプラグイン以外を記述していない場合、下記エラーが発生

2013-01-02T23:28:25+00:00 app[web.1]: Caused by:
2013-01-02T23:28:25+00:00 app[web.1]: java.lang.IllegalStateException: The datab
ase-session plugin requires that the webxml plugin be installed

※3. DB接続を行わないアプリでも、jdbcがないと怒られる。

2013-01-02T23:40:08+00:00 app[web.1]: org.springframework.jdbc.support.MetaDataA
ccessException: Error while extracting DatabaseMetaData; nested exception is org
.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.post
gresql.Driver'



※4. applicationContext.xml がアップロードされていないと怒られる。
.gitignore の /web-app/WEB-INF をコメントアウトすればOK!

※5. 設定をしくじっている場合、503エラーとなる。

HTTP ERROR: 503
Problem accessing /. Reason:
Service Unavailable
Powered by Jetty://




WEB+DB PRESS Vol.71

WEB+DB PRESS Vol.71


Gitポケットリファレンス

Gitポケットリファレンス