ぜったいってなに

Software Engineerのブログです。

Play Scala DB connection その2

昨日の続き。



現状こんなかんじ。

/conf/application.conf

db {
  slick.dbs.default.driver="slick.driver.PostgresDriver$"
  slick.dbs.default.db.dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
  slick.dbs.default.db.properties.driver = "org.postgresql.Driver"
  slick.dbs.default.db.user=play
  slick.dbs.default.db.password="play"
}


改めてドキュメントを読んでみる。

PlaySlick - 2.4.x


ここで、"slick.jdbc.DatabaseUrlDataSource"DatabaseUrlDataSourceはべた書きではなく、例えばPostgreSQLのように書くのでは、と気づく。でもフォーマットがわからないのでどうしようもない。


困っていたらTwitterで救いの手が。。。

YoshinoriNさんありがとうございました。



ドキュメントをよくよく読むと、
「Herokuのような特定のプラットフォームでは以下のような書き方もできます」と書いてある。

slick.dbs.default.driver="slick.driver.PostgresDriver$"
slick.dbs.default.db.driver="org.postgresql.Driver"
slick.dbs.default.db.url=${JDBC_DATABASE_URL}


${JDBC_DATABASE_URL}にはjdbc:vendor://host:port/dbのようなフォーマットが入るらしい。
これを設定してみる。

db {
  slick.dbs.default.driver="slick.driver.PostgresDriver$"
  slick.dbs.default.db.driver="org.postgresql.Driver"
  slick.dbs.default.db.url="jdbc:postgresql://localhost/playdb"
  slick.dbs.default.db.user=play
  slick.dbs.default.db.password="play"

  play.evolutions.enabled=true
}


が、駄目。



どうしようもなく、playのサンプルアプリケーションのapplication.confを漁ってみると、
他の人はdb{}内にslickの設定を書いていないことに気づいた。


それに倣ってslickの設定をdb{}の外に出してみる。

db{
}

slick.dbs.default.driver="slick.driver.PostgresDriver$"
slick.dbs.default.db.driver="org.postgresql.Driver"
slick.dbs.default.db.url="jdbc:postgresql://localhost/playdb"
slick.dbs.default.db.user=play
slick.dbs.default.db.password="play"

play.evolutions.enabled=true


動いた!!

f:id:zettaittenani:20170912234611p:plain


Apply this script now!をクリックして、
PostgreSQLにテーブルが入っているかどうか確認する。

$ psql -d playdb -U play -W
Password for user play:
psql (9.6.3)
Type "help" for help.

playdb=> \d
            List of relations
 Schema |      Name       | Type  | Owner
--------+-----------------+-------+-------
 public | ARTICLE         | table | play
 public | COMMENT         | table | play
 public | member          | table | play
 public | play_evolutions | table | play
(4 rows)


ちゃんと入ってる!



調子に乗ってこんな書き方もしてみる。

/conf/application.conf

slick {
  dbs.default.driver="slick.driver.PostgresDriver$"
  dbs.default.db.driver="org.postgresql.Driver"
  dbs.default.db.url="jdbc:postgresql://localhost/playdb"
  dbs.default.db.user=play
  dbs.default.db.password="play"
}

play.evolutions.enabled=true


これも動いた。



かなり苦戦したけどこれでDB接続ができたので、次はModelを設定します。
Model設定ができればアプリケーションが書けるようになるので
今より楽しくなりそう。