heroku(scala編)
sbtインストール(cygwin上)
https://github.com/harrah/xsbt/wiki/Getting-Started-Setup
から
sbt-launch.jar
をダウンロードする。
sbt-launch.jar
を保存したディレクトリに
shellスクリプトsbtを作成して実行権限を付与する。
SBT_DIR=`dirname $0` java -Xmx512M -jar `cygpath -m $SBT_DIR`/sbt-launch.jar "$@"
sbt起動スクリプトにPATHを通す。
.bash_profile
export PATH="/cygdrive/C/{sbt置き場}:$PATH"
heroku login
$ heroku login Enter your Heroku credentials. Email: ousttrue@gmail.com Password:
プロジェクト
$ mkdir sbthello $ cd sbthello $ mkdir -p src/main/scala
import org.jboss.netty.handler.codec.http.{HttpRequest, HttpResponse} import com.twitter.finagle.builder.ServerBuilder import com.twitter.finagle.http.{Http, Response} import com.twitter.finagle.Service import com.twitter.util.Future import java.net.InetSocketAddress import util.Properties object Web { def main(args: Array[String]) { val port = Properties.envOrElse("PORT", "8080").toInt println("Starting on port:"+port) ServerBuilder() .codec(Http()) .name("hello-server") .bindTo(new InetSocketAddress(port)) .build(new Hello) println("Started.") } } class Hello extends Service[HttpRequest, HttpResponse] { def apply(req: HttpRequest): Future[HttpResponse] = { val response = Response() response.setStatusCode(200) response.setContentString("Hello World") Future(response) } }
$ mkdir project $ echo sbt.version=0.11.0 > project/build.properties
build.sbt
import com.typesafe.startscript.StartScriptPlugin seq(StartScriptPlugin.startScriptForClassesSettings: _*) name := "hello" version := "1.0" scalaVersion := "2.8.1" resolvers += "twitter-repo" at "http://maven.twttr.com" libraryDependencies ++= Seq("com.twitter" % "finagle-core" % "1.9.0", "com.twitter" % "finagle-http" % "1.9.0")
project/build.sbt
resolvers += Classpaths.typesafeResolver addSbtPlugin("com.typesafe.startscript" % "xsbt-start-script-plugin" % "0.3.0")
ビルド
$ sbt clean compile stage
foreman
Procfile
web: target/start Web
$ foreman start
target/startがWindows的に都合悪い
\を/に、:C:を;C:に置換すれば動いた。
gitに登録
.gitignore
target project/boot project/target project/plugins/target
$ git add . $ git commit -m "init" [master (root-commit) 8ebe005] init 6 files changed, 51 insertions(+), 0 deletions(-) create mode 100644 .gitignore create mode 100644 Procfile create mode 100644 build.sbt create mode 100644 project/build.properties create mode 100644 project/build.sbt create mode 100644 src/main/scala/Web.scala
herokuアプリを作る
$ heroku create --stack cedar
herokuにアップする
$ git push heroku master