※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() { ListlistFoo = 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・views/foo.scala.htmlfindAllList() { return find.all(); } }
@(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 件のコメント:
コメントを投稿