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の接続情報が見れる。