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) }