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" }
改めてドキュメントを読んでみる。
ここで、"slick.jdbc.DatabaseUrlDataSource"
のDatabaseUrlDataSource
はべた書きではなく、例えばPostgreSQL
のように書くのでは、と気づく。でもフォーマットがわからないのでどうしようもない。
困っていたらTwitterで救いの手が。。。
私も詳しくない & 全体のコードが解らないのでアレですが...
— YoshinoriN (@yoshinorin24) 2017年9月11日
slick.dbs.default.db.url="jdbc:xxxxx"
の指定がないからじゃないでしょうか?
後はplay.evolutions.enabledがfalseになってるとか...
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
動いた!!
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設定ができればアプリケーションが書けるようになるので
今より楽しくなりそう。