herokuでscalaでplayでpostgresql
つづき。
postgresqlにつないでみる。
デフォでherokuにpostgresのアドオンは入ってる。
ので、追加はしなくてよい。
herokuのpostgresqlに付いないでテーブルを作っておく。
アプリのルートでheroku pg:psqlすればherokuのpostgresqlにつながる。
ローカルにもpsqlがいるので注意。
つながったら適当にテーブルを作ってデータ入れとく。
herokuアプリのルートフォルダにProcfileを作って以下を書いとく。
web: target/universal/stage/bin/[アプリ名] -Dhttp.port=${PORT} -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${DATABASE_URL}
build.sbtにjdbc追加。
name := """アプリ名"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayScala)
scalaVersion := "2.11.1"
libraryDependencies ++= Seq(
jdbc,
anorm,
cache,
ws,
"org.postgresql" % "postgresql" % "9.3-1102-jdbc41"
)
build.sbtに追加後、update。必要なのかどうか分かってないので一応やっておく。
./activator update
ついでにeclipse用のプロジェクトも作りなおしておいた。これも必要か分かってない。
./activator eclipse
適当にselect してみる。
def index = Action {
val dbUri = new URI(System.getenv("DATABASE_URL"))
val username = dbUri.getUserInfo().split(":")(0)
val password = dbUri.getUserInfo().split(":")(1)
val dbUrl = "jdbc:postgresql://" +
dbUri.getHost() +
':' +
dbUri.getPort() +
dbUri.getPath() +
"?user=" + username +
"&password=" + password +
"&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory"
val con = DriverManager.getConnection(dbUrl)
try {
con.setAutoCommit(false)
val sql = "select * from testtb0 order by id"
val st = con.createStatement()
val rs = st.executeQuery(sql)
var msg = ""
while(rs.next) {
// データ取得
val r = for(n <- 1 to 2) yield rs.getObject(n)
msg += r
}
Ok(views.html.index(msg))
}finally{
con.close()
}
}
その他。
H10が出て参った。
heroku logsでログを見れる。
printlnしとけばログに出る。
heroku config でDBの接続情報が見れる。