今回は接続先データベースをH2からpostgresqlにしてみようと思います。
おそらく、デプロイ先はHerokuにすると思うので、先にそうしておこうということです。
PosgresqlのJDBCドライバを入れる
まず、PostgresqlのJDBCドライバを使うようにbuild.gradleに記述します。
2015-08-12時点で最新ぽいのを入れました。
dependencies { // 略 runtime 'org.postgresql:postgresql:9.4-1201-jdbc41' // 略 }
application.ymlの修正
次にapplication.ymlの修正です。
dataSourceの箇所と、environments以下の環境ごとの箇所の修正になります。
ユーザー名、パスワードは適当に設定してください。
dataSource: pooled: true jmxExport: true driverClassName: org.postgresql.Driver username: example password: example environments development: dataSource: dbCreate: update url: jdbc:postgresql://localhost/example_development logSql: true test: dataSource: dbCreate: update url: jdbc:postgresql://localhost/example_test production: # 略(とりあえず変更せず)
developmentのdbCreateのところを、create-dropからupdateにしておきました。
というのも、create-dropだとアプリの終了・起動時に毎回削除されてしまうためです。これが正しい設定なのかはまだよくわかっていませんが、とりあえずこうしています。一旦アプリを再起動させてもデータが残っていることは確認できたので、目的は果たせていると思います。
詳しい人は是非とも教えてください!
データベースユーザーとデータベースの作成
postgresqlはインストールされているものとします。
ない場合はインストールしましょう。Macならhomebrewで入れられます。
プロジェクト用のデータベースユーザーとデータベースを作ってみます。
まずは、データベースユーザーの作成。
ユーザーはexample、パスワードもexampleとします(適当に変えてください)
createuser -h localhost -d example -W password: (表示されないけれどexampleと入力してEnter)
次に、データベースを作ります。
開発用のexample_developmentとテスト用のexample_testを作っておきます。
-Oオプションで、データベースの所有者(Owner)をexampleユーザーにしています。
createdb -E UTF-8 --locale=C -T template0 -O example example_development createdb -E UTF-8 --locale=C -T template0 -O example example_test
Grailsの起動
とりあえずこれで起動してみました。
grails run-app
無事に起動すれば成功です。前に作成したBookのScaffoldからBookのデータの登録ができるところまで確認できました。
まとめ
Grailsでの対象データベースの変更はJDBCドライバを入れ替えるくらいでそこまで大変ではないが、データベースの準備はやっぱり大変である…。