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の設定は終了したので、あとで独自のアカウントテーブルを作る。