heroku で Grails + PostgreSQL を試してみる
GrailsアプリをHerokuで公開する の続きです。
今回はGrails2.1.1 で作成したCRUDアプリを heroku で動かしてみます。
ソースはGitHubにて公開しています。
大まかな手順
1.heroku のデータベース作成
2.ローカルで動作確認したアプリに heroku 用の設定を行う
3.デプロイ & 動作確認
以下、詳細。
1.heroku のデータベース作成
- herokupostgres のページへ遷移。
heroku dashboard > [ Resources] > [ Heroku Postgres Dev ]
- heroku のアカウントでログイン
- Your Databases ラベルの右横にある[ + ] ボタンを押下
- [ Dev Plan ] を押下後、表示された [ Add Database] を押下
- 追加されたDB名を押下して接続情報を確認
(歯車ボタンで接続情報のフォーマットを変えられます)
2.ローカルで動作確認したアプリに heroku 用の設定を行う
DataSource.groovy の本番用接続情報に 1-5 で確認した情報を設定する。
「sslfactory = org.postgresql.ssl.NonValidatingFactory」を忘れないよう注意!
上記設定を行っていない場合、下記エラーが発生。
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
3.デプロイ & 動作確認
普通に動きます。
◇ おまけ ◇
<g:form>の使い方を誤っていたために、下記エラーが発生。
ローカル環境では動いていたが、heroku上でエラーになった。
URI /todo/index
Class java.lang.IllegalArgumentException
Message Method name must not be null
Error 500: Internal Server Error
Line | Method ->> 41 | retrieveAction in grails.plugin.cache.web.ProxyAwareMixedGrailsControllerHelper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 547 | handle in org.eclipse.jetty.servlet.ServletHolder | 1359 | doFilter . . . . in org.eclipse.jetty.servlet.ServletHandler$CachedChain | 186 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter | 63 | doFilter . . . . in grails.plugin.cache.web.filter.AbstractFilter | 1330 | doFilter in org.eclipse.jetty.servlet.ServletHandler$CachedChain | 478 | doHandle . . . . in org.eclipse.jetty.servlet.ServletHandler | 119 | handle in org.eclipse.jetty.server.handler.ScopedHandler | 520 | handle . . . . . in org.eclipse.jetty.security.SecurityHandler | 227 | doHandle in org.eclipse.jetty.server.session.SessionHandler | 941 | doHandle . . . . in org.eclipse.jetty.server.handler.ContextHandler | 409 | doScope in org.eclipse.jetty.servlet.ServletHandler | 186 | doScope . . . . in org.eclipse.jetty.server.session.SessionHandler | 875 | doScope in org.eclipse.jetty.server.handler.ContextHandler | 117 | handle . . . . . in org.eclipse.jetty.server.handler.ScopedHandler | 288 | forward in org.eclipse.jetty.server.Dispatcher | 115 | forward . . . . in '' | 1330 | doFilter in org.eclipse.jetty.servlet.ServletHandler$CachedChain | 51 | doFilterInternal in grails.plugin.databasesession.SessionProxyFilter | 1330 | doFilter in org.eclipse.jetty.servlet.ServletHandler$CachedChain | 478 | doHandle . . . . in org.eclipse.jetty.servlet.ServletHandler | 119 | handle in org.eclipse.jetty.server.handler.ScopedHandler | 520 | handle . . . . . in org.eclipse.jetty.security.SecurityHandler | 227 | doHandle in org.eclipse.jetty.server.session.SessionHandler | 941 | doHandle . . . . in org.eclipse.jetty.server.handler.ContextHandler | 409 | doScope in org.eclipse.jetty.servlet.ServletHandler | 186 | doScope . . . . in org.eclipse.jetty.server.session.SessionHandler | 875 | doScope in org.eclipse.jetty.server.handler.ContextHandler | 117 | handle . . . . . in org.eclipse.jetty.server.handler.ScopedHandler | 250 | handle in org.eclipse.jetty.server.handler.ContextHandlerCollection | 149 | handle . . . . . in org.eclipse.jetty.server.handler.HandlerCollection | 110 | handle in org.eclipse.jetty.server.handler.HandlerWrapper | 345 | handle . . . . . in org.eclipse.jetty.server.Server | 441 | handleRequest in org.eclipse.jetty.server.HttpConnection | 936 | content . . . . in org.eclipse.jetty.server.HttpConnection$RequestHandler | 801 | parseNext in org.eclipse.jetty.http.HttpParser | 224 | parseAvailable . in '' | 51 | handle in org.eclipse.jetty.server.AsyncHttpConnection | 586 | handle . . . . . in org.eclipse.jetty.io.nio.SelectChannelEndPoint | 44 | run in org.eclipse.jetty.io.nio.SelectChannelEndPoint$1 | 598 | runJob . . . . . in org.eclipse.jetty.util.thread.QueuedThreadPool | 533 | run in org.eclipse.jetty.util.thread.QueuedThreadPool$3 ^ 636 | run . . . . . . in java.lang.Thread
原因:formタグに controller 属性を記述していなかったためエラー
【駄目なソース】
<g:form method="post"> <g:actionSubmit value="add" action="/create"/> </g:form>
【正しいソース】
<g:form controller="todo" method="post"> <g:actionSubmit value="add" action="create"/> </g:form>
- 作者: 竹迫良範,Jxck,じょさん,後藤秀宣,藤原俊一郎,奥野幹也,堤智代,森田創,中島聡,A-Listers,はまちや2,相澤歩,柴田博志,池田尚史,梅澤雄一郎,九岡佑介,近藤宇智朗,佐藤鉄平,mala,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2012/10/24
- メディア: 大型本
- 購入: 12人 クリック: 157回
- この商品を含むブログ (10件) を見る