※Heroku addon xeroundは5月頭にFree Planはなくなるという通知を受けました。
- 開発環境
jdk1.6
Scala2.10.0
Play!(Java)2.1.0
sbt 0.12.2
- 前提
Herokuのアカウント
sshでHerokuにログインできる
HelloWorldアプリをHerokuにとりあえずDeploy
まずはPlay!でHelloWorldサンプルをつくる。
$ mkdir ~/workspace/
$ cd ~/workspace/
$ play new helloworld
アプリの雛形ができる
$ cd helloworld
$ sbt
[helloworld] $ play
_ _
_ __ | | __ _ _ _| |
| '_ \| |/ _' | || |_|
| __/|_|\____|\__ (_)
|_| |__/
play! 2.1.0 (using Java 1.7.0_07 and Scala 2.10.0), http://www.playframework.org
> Type "help play" or "license" for more information.
> Type "exit" or use Ctrl+D to leave this console.
[helloworld] $ reload
[helloworld] $ update
[helloworld] $ compile
[helloworld] $ run
とりあえずブラウザで http://localhost:9000/ にアクセスしてみる。ページがちゃんと表示されればおk。
この状態でとりあえずHerokuにDeployしてみる。
$ pwd
~/workspace/helloworld/
$ git init
$ git add .
$ git commit -m "init"
[master (root-commit) 20c2af7] init
14 files changed, 240 insertions(+)
create mode 100644 .gitignore
...
$ heroku create
Creating 【Heroku上に作成されたアプリ名】... done, stack is cedar
http://【Heroku上に作成されたアプリ名】.herokuapp.com/ | git@heroku.com:【Heroku上に作成されたアプリ名】.git
Git remote heroku added
$ git push heroku master
...
-----> Play 2.x - Java app detected
-----> Installing OpenJDK 1.6...done
-----> Building app with sbt
-----> Running: sbt clean compile stage
Getting net.java.dev.jna jna 3.2.3 ...
...
[success] Total time: 6 s, completed Mar 31, 2013 3:28:58 PM
-----> Dropping ivy cache from the slug
-----> Discovering process types
Procfile declares types -> (none)
Default types for Play 2.x - Java -> web
-----> Compiled slug size: 119.3MB
-----> Launching... done, v6
http://【Heroku上に作成されたアプリ名】.herokuapp.com deployed to Heroku
To git@heroku.com:【Heroku上に作成されたアプリ名】.git
* [new branch] master -> master
メッセージに表示されている通り、ブラウザで http://【Heroku上に作成されたアプリ名】.herokuapp.com にアクセスして、ローカルでやったときと同じようにページが表示されればおk。ミスってたら heroku logs コマンドでLogを見るべし。Herokuの設定を確認。
$ heroku config === 【Heroku上に作成されたアプリ名】 Config Vars DATABASE_URL: postgres://FooHoge HEROKU_POSTGRESQL_GREEN_URL: postgres://FooHoge JAVA_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOops PATH: .jdk/bin:.sbt_home/bin:/usr/local/bin:/usr/bin:/bin REPO: /app/.sbt_home/.ivy2/cache SBT_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOopsデフォルトのデータベースURLはポスグレですね。
HelloWorldアプリをDB(MySQL)を使った簡易アプリに変えていく
まずはローカルで。conf/application.confを編集する。
$ pwd ~/workspace/helloworld/ $ vim conf/application.conf・conf/application.conf 抜粋(JNDI,mysql, Ebeanの設定)
# You can expose this datasource via JNDI if needed (Useful for JPA) db.default.jndiName=DefaultDS # mysql config db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://127.0.0.1:3306/helloworld?characterEncoding=UTF8" db.default.user="root" db.default.password="" # Ebean configuration ebean.default="models.*"MySQLでdatabase helloworldを作成(コンソールから)
on Terminal $ mysql -uroot on MySQL Console mysql> CREATE DATABASE helloworld; Query OK, 1 row affected (0.05 sec)project/Build.scalaのdependencyにmysql-driverを追加する
$ pwd ~/workspace/helloworld/ $ vim project/Build.scala・project/Build.scala抜粋
val appDependencies = Seq(
// Add your project dependencies here,
javaCore,
javaJdbc,
javaEbean,
"mysql" % "mysql-connector-java" % "5.1.24"
)
最小限のコードを追加・編集する(本エントリではEclipseを使っている)。追加するのは以下の3つ。・controllers/Application.java
・models/Foo.java
・views/foo.scala.html
Eclipseにプロジェクトをインポートする。
$ pwd ~/workspace/helloworld $ sbt [helloworld] $ reload [helloworld] $ update [helloworld] $ eclipse・controllers/Application.java
package controllers;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.PersistenceException;
import com.avaje.ebean.Ebean;
import models.Foo;
import play.Logger;
import play.mvc.Controller;
import play.mvc.Result;
import views.html.foo;
import views.html.index;
public class Application extends Controller {
public static Result index() {
List listFoo = new ArrayList();
Foo foo1 = new Foo();
foo1.name = "rkaneko";
foo1.age = 25;
listFoo.add(foo1);
Foo foo2 = new Foo();
foo2.name = "okenakr";
foo2.age = 52;
listFoo.add(foo2);
try {
Ebean.save(listFoo);
} catch (PersistenceException e) {
Logger.info(e.getMessage());
}
return ok(index.render("Your new application is ready."));
}
public static Result foo() {
List listFoo = Foo.findAllList();
return ok(foo.render(listFoo));
}
}
・models/Foo.java
package models;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import play.db.ebean.Model;
@Entity
@Table(name = "foo")
public class Foo extends Model {
/** serial id */
private static final long serialVersionUID = 1L;
/**
* Id .
* Primary key
*/
@Id
public Long id;
/** name */
public String name;
/** age */
public Integer age;
/** finder */
public static Finder<Long, Foo> find = new Finder<Long, Foo>(Long.class, Foo.class);
/**
* Get all entities list .
* @return
*/
public static List findAllList() {
return find.all();
}
}
・views/foo.scala.html
@(listFoo: List[Foo])
@main("Welcome to Play 2.1") {
Hello Play! framework on Heroku
Use MySQL on Heroku
@for(foo <- listFoo){
| ID | Name | Age |
|---|---|---|
| @foo.id | @foo.name | @foo.age |
HerokuでMySQLを使うための設定
HerokuでMySQLを使うためにxeroundというaddonを入れる。xeroundはAWSを利用したDatabase as a Service(DaaS)。今回はFreeプラン(starter)を利用する。10MBまで無料らしい。このaddonを使用するにはクレカ情報を登録する必要がある。クレカ情報を登録してないと、
$ heroku addons:add xeround:starter Adding xeround:starter on 【Heroku上に作成されたアプリ名】... failed ! Please verify your account to install this add-on ! For more information, see http://devcenter.heroku.com/categories/billing ! Verify now at https://heroku.com/verifyのように登録してねって怒られる。
$ heroku addons:add xeround:starter Adding xeround:starter on 【Heroku上に作成されたアプリ名】... done, v6 (free) Use `heroku addons:docs xeround:starter` to view documentation.herokuの設定確認
$ heroku config === 【Heroku上に作成されたアプリ名】 Config Vars DATABASE_URL: postgres://FooHoge ... XEROUND_DATABASE_NAME: app何かしらの番号 XEROUND_DATABASE_PASSWORD: 何かしらのパスワード XEROUND_DATABASE_PORT: 何かしらのポート番号 XEROUND_DATABASE_URL: mysql://【USERNAME】:【PASSWORD】@instance番号.db.xeround.com.:【PORT】/【USERNAME】 XEROUND_DATABASE_USERNAME: app何かしらの番号 $ heroku config:add DATABASE_URL=ここにXEROUND_DATABASE_URLを入力する Setting config vars and restarting arcane-coast-2375... done, v8 DATABASE_URL: ここは設定したXEROUND_DATABASE_URLが表示される
HerokuにDeployしたときにデータベース接続先をxeroundデータベースにする設定
conf/application.conf の設定を少し変更・追加する。$ pwd ~/workspace/helloworld/ $ vim conf/application.conf・conf/application.conf
# mysql config db.default.url="ここにはXEROUND_DATABASE_URLを記入?characterEncoding=UTF8" db.default.user="ここにはXEROUND_DATABASE_USERNAMEを記入" db.default.password="ここにはXEROUND_DATABASE_PASSWORDを記入" # for heroku Evolutions config Deploy時にEvolutionsでデータベースマイグレーションを行う設定 applyEvolutions.default=true
Herokuに再度Deployする
アプリの方は完成したので再度HerokuにDeployする。$ pwd ~/workspace/helloworld $ git add . $ git commit -m "added xeround config on application.conf" $ git push heroku masterこれで、特にエラーメッセージも出ずに、再度ブラウザでHeroku上のアプリにアクセスして無事ページが表示されればおk。 とりあえず、Play! on HerokuでMySQL使ってみるっていう目標で最小限のことはできたけど、application.confはもう少しDevとProduction時の設定を柔軟に書きたい。
参考
・playframework.com#documentation#ProductionHeroku
・heroku.com#Xeround
・heroku.com#addon#Xeround Cloud Database
・heroku.com#Database-Driven Web Apps with Play!
・カエの部屋#herokuのアドオンでmysqlを利用する。もち無料。
・xeround.com#Connecting your MySQL-Heroku application to Xeround Cloud Database
・xeround.com#Connecting your MySQL-Heroku application to Xeround Cloud Database#2
・https://groups.google.com/forum/#!topic/play-framework/0DWLfJMDq4w
・heroku.com#Xeround
・heroku.com#addon#Xeround Cloud Database
・heroku.com#Database-Driven Web Apps with Play!
・カエの部屋#herokuのアドオンでmysqlを利用する。もち無料。
・xeround.com#Connecting your MySQL-Heroku application to Xeround Cloud Database
・xeround.com#Connecting your MySQL-Heroku application to Xeround Cloud Database#2
・https://groups.google.com/forum/#!topic/play-framework/0DWLfJMDq4w

0 件のコメント:
コメントを投稿