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

futoase

よろしくお願いします。

俺 AdventCalendar 12日目-

25日を過ぎてもがんばって投稿するぞ

  • やり切らないとだめだ。今年中に終える

Herokuに対してScalaアプリをデプロイする

  • といってもTutorialを丁寧にやっていくだけですが。

準備するもの

  • scala (homebrew で入れられます)
  • sbt (homebrew で入れられます)
  • heroku コマンド (gem install heroku で入れられます)

実践

  • ここを見ながら進めていきます。

heroku loginを済ませる

  • heroku loginで 公開鍵をherokuサーバにアップロードします。

codeを書く

  • ルートディレクトリに対し、以下のディレクトリ・ファイルを作成します
Web.scala
package 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)
  }
}
  • 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.properties
sbt.version=0.11.0
  • project/build.sbt
resolvers += Classpaths.typesafeResolver

addSbtPlugin("com.typesafe.startscript" % "xsbt-start-script-plugin" % "0.3.0")

sbt clean compile stage を実行する

  • 無事ビルドが成功すれば以下のとおりに。

foreman startを行い、アプリの挙動を確認する

  • foremanのためにProcfileを作成する
  • Procfile
web: target/start Web

localhost:5000 にアクセス
  • 成功すればこのとおり

heroku に作成した scala アプリを deploy

  • 以下の流れで heroku に commit する。
  • .gitignore
    • ビルドされるバイナリなどは不要ファイルとする
target
project/boot
project/target
project/plugins/target
  • commit

  • ceder stack にアプリを設定する
    • Scalaやnode.jsに対応したCeder Stackというものを利用する。
    • 以下のコマンドを実行すれば設定される。

  • deploy
heroku push heroku master

push したときに hook 時に問題が提起されなければOK

deploy 結果を確認する

以上です。

Copyright (c) 2013-2017 Keiji Matsuzaki