ScalaをDotCloudにアップロードするためのsbtサンプル
May 9, 2011 - Scala
dotcloudを必要最低限操作するためのactionをsbtに追加してみました。
sbtのアクション自体はじめてなので作法がよくわかってないので、間違っているかも知れませんが。
使い方
※scalaファイルは最後に掲載しています。 とりあえず下記を作成するサービス名に置き換えればOKです。
val dotApplicationName = "APPNAME"
val dotServiceName = dotApplicationName + ".SERVNAME"
あとは、下記を順に実行すればOK(dot_prepareはdot_pushの前に必ず実行されるので省略可能)
- “sbt dot_create” : サービスの作成
- “sbt dot_prepare” : リリース用ディレクトリ作成とwarファイルのコピー
- “sbt dot_push” : dotcloudへのwarファイルpush
dotcloud用に注意すべきこと
“sbt package”を使用すると、”<projectName>-<scala_ver>-<app_ver>.war”の形式でwarファイルが作成されます。 が、dotcloudのドキュメントにはこう書いてあるので、”root.war”で作成するのが望ましいです。
The java service will make your application available at http://frontend.myapp.dotcloud.com/ if your archive is named root.war or http://frontend.myapp.dotcloud.com/webapp/ if your archive is named webapp.war (../foobar/ if the archive was named foobar.war and so on). So, you can effectively serve multiple web applications with the same java service.Java — DotCloud documentation
さらに、”dotcloud push”はwarファイルを含むディレクトリを指定することになり、それ以下がすべて同期されてしまいます。デフォルトだと、”./target/scala_2.8.1/“以下のすべてが。
なので、warのみ格納する”release”ディレクトリを作り、 そこに”root.war”としてひとつだけ存在させておきました。 順番に書くと、
- sbt packageでtarget/scala_2.8.1/<projectName>-<scala_ver>-<app_ver>.warを生成
- そのwarファイルをtarget/release/root.warにコピー
- “dotcloud push <dotcloud_appname> target/release/” でwarのみアップロード
という方法で対応しました。
以下、サンプルのプロジェクト設定です。