dotcloud + Play framework1.2.5 + PostgreSql で使ってみましょう。

構成ファイルにPostgreSqlを使う記述を追加

$ vi ~/play/dotcloud/hello/dotcloud.yml
www:
  type: java
 
data:
  type: postgresql
 

helloプロジェクトをデプロイ

※一旦デプロイしないとDB接続情報を見られません。
$ dotcloud push hello ~/play/dotcloud/hello/
 

DB接続情報確認

$ dotcloud info hello.data
config:
    postgresql_password: ぱすわーど
created_at: 1341474539.4294181
datacenter: Amazon-us-east-1c
image_version: 220b790a574f (latest)
instance: data.0
memory:
-   total reserved: N/A (sandbox app)
-   total used: 8MB
-   cache portion: 3MB of 8MB (43%)
ports:
-   name: ssh
    url: ssh://postgres@hello-chapati.dotcloud.com:ぽーと番号
-   name: sql
    url: pgsql://root:ぱすわーど@hello-chapati.dotcloud.com:ぽーと番号
pricing: free
state: running
type: postgresql
 

DBユーザー作成

$ dotcloud run hello.data -- createuser chapati --pwprompt
# createuser chapati --pwprompt
Enter password for new role: 新しいユーザーのパスワード入力
Enter it again: 再入力
Shall the new role be a superuser? (y/n) y
 

DB作成

$ dotcloud run hello.data -- createdb mydb
# createdb mydb
 

helloプロジェクト修正

DBを使えるか確認するための簡単なプログラムを作成します。

修正内容

  1. トップページにユーザー情報入力フォームを表示。
  2. トップページにユーザー一覧を表示。
  3. 登録ボタンで入力されたユーザー情報を登録しトップページに戻る。

application.confにDB接続情報を記述

※DB接続情報確認で表示された情報をちょこっと加工してあります。
$ vi ~/play/apps/hello/conf/application.conf
db=postgres://root:ぱすわーど@hello-chapati.dotcloud.com:ぽーと番号/mydb
 

Applicationコントローラ修正

$ cat ~/play/apps/hello/app/controllers/Application.java
package controllers;
 
import play.*;
import play.mvc.*;
import java.util.*;
import models.*;
 
public class Application extends Controller {
 
        public static void index() {
                List<User> users = User.findAll();
                render(users);
        }
 
        public static void registUser(User user) {
                user.save();
                index();
        }
}
 

Application/index.html テンプレート修正

ユーザ登録フォームとユーザ一覧を表示できるようにします。
$ cat ~/play/apps/hello/app/views/Application/index.html
#{extends 'main.html' /}
#{set title:'ユーザー登録' /}

<h3>ユーザー登録</h3>
#{form @Application.registUser()}
  <div>名前:<input type="text" value="" name="user.name"/></div>
  <div >メールアドレス:<input type="text" value="" name="user.email"/></div>
  <input type="submit" value='登録'>
#{/form}

<h3>登録ユーザー</h3>
#{list items:users, as:'user'}
  <div>
    ${user.name}
    ${user.email}
  </div>
#{/list}
 

User モデル作成

$ cat ~/play/apps/hello/app/models/User.java
package models;
 
import javax.persistence.Entity;
import javax.persistence.FieldResult;
import javax.persistence.ManyToOne;
 
import play.db.jpa.Model;
 
// dotcloudのDBにUserテーブルは作成できないためテーブル名指定
@Entity(name="helloUser")
public class User extends Model {
 
        public String name;
        public String email;
 
        public User(String name, String email, String desc) {
                this.name = name;
                this.email = email;
        }
 
}
 

修正したhelloプロジェクトをデプロイ

$ ~/play/play-1.2.5/play war hello -o ~/play/dotcloud/hello/hello.war --zip
$ dotcloud push hello ~/play/dotcloud/hello/
 

ブラウザから何人かユーザー登録


ちゃんとDBに登録できたか確認

sshでhello.dataに接続

$ dotcloud ssh hello.data
# $SHELL
postgres@hello-default-data-0:~$
 

mydbに接続

postgres@hello-default-data-0:~$ psql mydb
psql (9.0.4)
Type "help" for help.
 

hellouserテーブルをselect文で確認してみる

mydb=# select * from hellouser;
 id |  email   |   name
----+----------+----------
  1 | test     | test
  2 | hogehoge | hogehoge
  3 | 2222     | 1111
  4 | 88888    | 9999
(4 rows)
 

画面と同じ物が表示されたのでOK!!
最終更新:2012年09月28日 02:36
添付ファイル