DotCloudのアカウントを放ったらかしていたのだけれど、
ベータから移行するときにちょっとよいアカウントをもらえた気がしたので使ってみました。
ScalaとそのフレームワークScalatraを動かします。
まず何はともあれいつもの構成を作りましょう。
sbtで適当にプロジェクトを作りました。
次はScalatraを使うためのプロジェクト設定です。
project/build/MyProject.scala
を作成して下記の内容を記述します。
import sbt._ class MyProject(info: ProjectInfo) extends DefaultWebProject(info) { override def webappClasspath = super.webappClasspath +++ buildCompilerJar val servletapi = "javax.servlet" % "servlet-api" % "2.5" % "provided" val scalatraVersion = "2.0.0-SNAPSHOT" val scalateVersion = "1.6.0-SNAPSHOT" val scalatra = "org.scalatra" %% "scalatra" % scalatraVersion val scalatraScalate = "org.scalatra" %% "scalatra-scalate" % scalatraVersion val scalate = "org.fusesource.scalate" % "scalate-core" % scalateVersion //リポジトリ val sonatypeNexusSnapshots = "Sonatype Nexus Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots" val sonatypeNexusReleases = "Sonatype Nexus Releases" at "https://oss.sonatype.org/content/repositories/releases" val fuseSourceSnapshots = "FuseSource Snapshot Repository" at "http://repo.fusesource.com/nexus/content/repositories/snapshots" }
これでScalatraが使えるようになります。
web.xmlが必要なため下記内容で作成しました。
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>Main</servlet-name> <servlet-class>com.nishikawasasaki.Main</servlet-class> </servlet> <servlet-mapping> <servlet-name>Main</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
Mainで定義しているScalatraの処理にいくようにしています。
上のxmlで指定したcom.nishikawasasaki.Mainを下記内容で
src/main/scala/Main.scalaとして作成します。
package com.nishikawasasaki import org.scalatra.ScalatraServlet import org.scalatra.scalate.ScalateSupport class Main extends ScalatraServlet with ScalateSupport { beforeAll { contentType = "text/html" } get( "/" ) { "test" } }
"/"にアクセスすると画面にtext/htmlで"test"と返すシンプルな処理です。
sbtで"package-all"などしてwarを作成しておいてください。
これでひとまず通常のScalatraアプリの作成が完了しました。
# 実際開発するならjettyを使えるようにしておかないと不便ですけれど省いています
さてDotCloudにアップロードするにあたってまず
dotcloud create helloworldapp
を実行してアプリをDotCloudへ登録します。
つぎにこのDotCloudアプリを定義するためにdotcloud.ymlを作成します。
後で必要な場所にコピーして使うので作成する場所はどこでもいいです。
www: type: java
言うまでもなくScalaですがJavaで動かせます。
さてデプロイします。
どこでもよいので空のディレクトリを作成しwarをそこにコピーしてきます。
コピーしたwarはDotCloud指定の”root.war”に名前を変更します。
たとえばsbt管理ルート(projectやtargetディレクトリと同階層に)、
”deploy”ディレクトリを作成し、
その中にwarのコピーを入れてroot.warにリネームしました。
/ - project - target - deploy - root.war
上のような構成です。(だいぶ適当に省いてます・・・)
つぎにdeployディレクトリに先ほど作成したdotcloud.ymlもコピーします。
/ - deploy - root.war - dotcloud.war
これで準備は整ったので
deployディレクトリ内で
dotcloud push helloworldapp
を実行してやるとwarがデプロイされ最後にURLが表示されますので
ブラウザでURLにアクセスすると
test
とScalatraに書いた処理の通り実行されているはずです。
ポイントは
- dotcloud.ymlを手動できちんと作ってやること
- dotcloud push するときはディレクトリ内にwarとyml以外置かない
の2点だと思います。
また、warのリネームとか面倒だよ!という方は
「ScalaをDotCloudにアップロードするためのsbtサンプル | ReSTARTR」
http://goo.gl/kJLf0
にsbtの便利なサンプルを公開されている方がいらっしゃるので参考にしていただければ
sbt上で
- DotCloudプロジェクトを作成
- デプロイ用のroot.warの作成
- デプロイ
を行うことができます。すてきです。
あとはScalatraやScalateを使って好きなものを書けばいろいろできるんじゃないでしょうか・・・