PlayFramework + PostgreSQL環境構築 on AmazonLinux

PostgreSQLScalaの勉強用に構築した際のメモ。

--

まず、AmazonLinuxを立ちあげてこちらを参考にPostgreSQLをインストール
Install PostgreSQL on AWS EC2(Amazon Linux AMI 2013.03.1) | Developers.IO

バージョン確認。9.2.7がインストールされました。

-bash-4.1$ psql -version
psql (9.2.7)
Type "help" for help.

postgres=#

次に、PlayFrameworkのインストール。こちらを参考に2.2.3をインストールしました。
Installing

--

play new <name>でアプリケーションを作成して。

ec2-user$ mkdir ~/workspace && cd ~/workspace
ec2-user$ play new hello-play

動作確認をしたらPostgreSQLと接続する準備。ライブラリを依存関係に追加。 /home/ec2-user/workspace/hello-play/conf/build.sbt

name := "hello-play"

version := "1.0-SNAPSHOT"

libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,
  "org.postgresql" % "postgresql" % "9.2-1004-jdbc41"
)

play.Project.playScalaSettings

/home/ec2-user/workspace/hello-play/conf/application.conf

db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://127.0.0.1:5432/book"
db.default.user=postgres
db.default.password="password"

--

再起動すると以下のエラーが発生。DBの認証に失敗しているよう。

play.api.Configuration$$anon$1: Configuration error[Cannot connect to database [default]]
        at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:92) ~[play_2.10.jar:2.2.3]
        at play.api.Configuration.reportError(Configuration.scala:570) ~[play_2.10.jar:2.2.3]
        at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:252) ~[play-jdbc_2.10.jar:2.2.3]
        at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:243) ~[play-jdbc_2.10.jar:2.2.3]
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) ~[scala-library.jar:na]
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) ~[scala-library.jar:na]
Caused by: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "postgres"
        at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:398) ~[postgresql-9.2-1004-jdbc41.jar:na]
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:173) ~[postgresql-9.2-1004-jdbc41.jar:na]
        at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64) ~[postgresql-9.2-1004-jdbc41.jar:na]
        at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:136) ~[postgresql-9.2-1004-jdbc41.jar:na]
        at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29) ~[postgresql-9.2-1004-jdbc41.jar:na]
        at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21) ~[postgresql-9.2-1004-jdbc41.jar:na]

パスワードが設定されていなかったのでパスワードを設定。

-bash-4.1$ psql book
psql (9.2.7)
Type "help" for help.

book=# alter user postgres password 'password';
ALTER ROLE
book=# \q
-bash-4.1$

無事に動作しました。

[hello-play] $ run

--- (Running the application from SBT, auto-reloading is enabled) ---

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Ctrl+D to stop and go back to the console...)

[info] play - database [default] connected at jdbc:postgresql://127.0.0.1:5432/book
[info] play - Application started (Dev)