LiftをOPENSHIFTにデプロイ mysql設定の覚書

前回の記事mysqlの設定に関する覚書。
OPENSHIFTのcartridgeにmysql5.5を追加すると、以下の用なメッセージが表示される。

MySQL 5.5 database added.  Please make note of these credentials:

       Root User: mysql_user
   Root Password: mysql_password
   Database Name: database_name

Connection URL: mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/

mysqlサーバーのホスト名とポートが、環境変数にセットされている!
liftのデフォルトのリソースファイル(src/main/resources/props/default.props)のキー、db.url=に環境変数を記述してもアクセスできる訳もない。
やむなく、src/main/scala/bootstrap/liftweb/Boot.scala環境変数を参照する用に修正。

src/main/resources/props/default.props:

db.driver     =com.mysql.jdbc.Driver
db.user       =mysql_user
db.password   =mysql_password
db.url_prefix =jdbc:mysql://
db.host       =OPENSHIFT_MYSQL_DB_HOST
db.port       =OPENSHIFT_MYSQL_DB_PORT
db.database   =database_name

src/main/scala/bootstrap/liftweb/Boot.scala

class Boot {
  def boot {
    if (!DB.jndiJdbcConnAvailable_?) {
      sys.props.put("h2.implicitRelativePath", "true")
      val url = (Props.get("db.url"): Option[String]) match {
       // default.propsにdb.urlのキーがあれば、それを採用。
        case Some(url) => url
       // 無ければ、各々から組み立てる。その際に環境変数から値を取得。
        case _ => { 
          val url_prefix = Props.get("db.url_prefix").getOrElse("")
          val host       = System.getenv(Props.get("db.host").getOrElse(""))
          val port       = System.getenv(Props.get("db.port").getOrElse(""))
          val database   = Props.get("db.database").getOrElse("")
          // 2バイト文字を使用出来るように、urlにパラメータを追加。
          url_prefix + host + ":" + port + "/" + database + "?useUnicode=true&characterEncoding=utf8"
        }
      }
      val vendor = 
	new StandardDBVendor(Props.get("db.driver") openOr "org.h2.Driver",
                             url,
			     Props.get("db.user"), Props.get("db.password"))

      LiftRules.unloadHooks.append(vendor.closeAllConnections_! _)

      DB.defineConnectionManager(util.DefaultConnectionIdentifier, vendor)
    }