ログ日記

作業ログと日記とメモ

LiftでWebアプリ(3): データベースの設定

本番用・開発用のデータベースを設定する。


Debian squeeze 標準の PostgreSQL 8.4 を使う。

aptititude install postgresql


pom.xml を編集。

    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>8.4-702.jdbc4</version>
    </dependency>


データベースを作成。

createuser scala-cart -P
createdb -O scala-cart -E UTF-8 scala-cart


DB接続情報をプロパティファイル src/main/resources/props/production.default.props に書く。

db.driver=org.postgresql.Driver
db.url=jdbc:postgresql:scala-cart
db.user=scala-cart
db.password=topsecret

http://www.assembla.com/spaces/liftweb/wiki/Set_Up_Jetty_and_PostgreSQL
http://www.assembla.com/spaces/liftweb/wiki/Run_Modes




ローカルでもテストするために、RunWebApp の設定で VM parameters に -Drun.mode=production を追加する。
確認のためにHelloWorld.scala を修正。

  def howdy = "#time *" #> date.map(_.toString + " : " + Props.mode)


環境切り替えのために Boot.scala を編集する。

    if (!DB.jndiJdbcConnAvailable_?) {
      val vendor = Props.mode match {
        case Props.RunModes.Production =>
          new StandardDBVendor(Props.get("db.driver") openOr "org.postgresql.Driver",
            Props.get("db.url") openOr "jdbc:postgresql:mydatabase",
            Props.get("db.user"), Props.get("db.password"))

        case _ =>
          new StandardDBVendor(Props.get("db.driver") openOr "org.h2.Driver",
            Props.get("db.url") openOr
            "jdbc:h2:lift_proto.db;AUTO_SERVER=TRUE",
            Props.get("db.user"), Props.get("db.password"))
      }


前回の続きだとフォームが見れないので UrlRewriteFilter を設定して確認できるようにする。

    <rule match-type="regex">
        <from>^(/public/|/user_mgt/|/classpath/|/ajax_request/)(.*)$</from>
        <to last="true">$1$2</to>
    </rule>

user_mgtを追加。
起動したらDBのテーブルが自動生成されるので、PostgreSQLを使ってサインアップできるようになった。
psqlでデータを確認できる。


サインアップ時のフォームは User.scala

  override def signupFields: List[FieldPointerType] =
    List(firstName, lastName, email, password)
  override def editFields: List[FieldPointerType] =
    List(firstName, lastName, email)

などを書くと変更できるが、ちょっと自由度に欠ける。
ここまででPostgreSQLの設定は終了したので、あとで独自のアカウントテーブルを作る。