読者です 読者をやめる 読者になる 読者になる

ScalaのSpray-canをHerokuデプロイしてみる

Scala Spray

Heroku

heroku.com Herokuはクラウドアプリケーションプラットフォーム。
Webアプリケーションをgitを使って、簡単にデプロイできる。



準備

tabakazu.hatenablog.com この記事で作成した雛形から始めます。



Scala on Heroku

Deploying Scala Apps on Heroku | Heroku Dev Center



Overview

// project/build.properties

sbt.version=0.13.9



Plugin Setup

// project/plugins.sbt

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.3")
// build.sbt

name := "spraycan-app"

version := "1.0"

scalaVersion := "2.11.8"

enablePlugins(JavaAppPackaging)

libraryDependencies ++= Seq(
    "com.typesafe.akka" %% "akka-actor" % "2.4.10",
    "io.spray" %% "spray-can" % "1.3.3"
)



Procfile

touch Procfile 
// Procfile 

web: target/universal/stage/bin/spraycan-app



HTTP Server

github.com/alex88/spray-akka-sample-heroku
こちらを参考にMain.scalaを書き換える

// src/main/scala/Main.scala

import akka.util.Timeout
import scala.concurrent.duration._
import akka.actor.{Props, ActorSystem}
import akka.io.IO
import akka.pattern.ask
import spray.can.Http
import scala.util.Properties

object Main{
  def main(args: Array[String]): Unit = {
    implicit val system = ActorSystem()
    val myWebServer = system.actorOf(Props[WebServer])
    val port = Properties.envOrElse("PORT", "8080").toInt
    implicit val timeout = Timeout(5.seconds)
    IO(Http) ask Http.Bind(service, interface = "0.0.0.0", port = port)
  }
}



実行

sbt compile stage run

http://localhost:8080/ で確認。
Hello Spray-canが表示されれば成功。



ディレクトリ構造

spraycan-app
├── Procfile
├── build.sbt
├── project
│   ├── build.properties
│   ├── plugins.sbt
├── src
│   ├── main
│   │   └── scala
│   └── test
│       └── scala
└── target



Deploy

Herokuのログインとアプリ作成

heroku login
heroku create


HerokuにPushする

git init
git add .
git commit -m "heroku deploy"
git push heroku master


確認する

heroku open