LoginSignup
1
1

More than 5 years have passed since last update.

HerokuでPlayframeworkのProcfileのハマりどころ

Last updated at Posted at 2018-06-30

はじめに

 PlayFrameworkを使ってWebサービスを作ってみたので、簡単にデプロイできると噂のHerokuを今更ながら試してみました。git push heroku masterで使用しているフレームがPlayFrameworkということを検出して自動でビルド開始するログを見て思わず「Heroku ってすげー!」ってなってましたが、ステータスがcrashedとなってハマったので、Herokuデプロイ時に必要なProcfileについての解決方法を簡単にまとめたいと思います。

環境

  • PlayFramework 2.4.1(Java)

解決方法

 Herokuでデプロイをする場合、Procfileに最低限の情報を記載してあげる必要がありますが、その書き方をきちんと理解してなかったようです。
ちなみにHerokuの公式サイトには以下のように記載するように書かれています。

Procfile
web: target/universal/stage/bin/{your project name} -Dhttp.port=$PORT

 ここで私は、your project name にHerokuのプロジェクトネームを記載していましたが、ここにはPlayFrameworkのプロジェクト情報が記載されている「build.sbt」の name属性を記載する必要があります。

build.sbt
name := "XXX" /* ここが {your project name}に相当 */

version := "1.0"

lazy val `baseball` = (project in file(".")).enablePlugins(PlayJava,PlayEbean)


resolvers += "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases"

scalaVersion := "2.11.11"

libraryDependencies ++= Seq(javaJdbc, cache, javaWs)

unmanagedResourceDirectories in Test <+= baseDirectory(_ / "target/web/public/test")

 PlayFrameworkはバージョンによってProcfilen書き方は変わるようですが、Herokuの公式サイトに加えてHerokuのrunコマンドを使ってHerokuに動作しているコンテナの実態を抑えるのが問題解決には早そうです。

heroku run "ls -l target/universal/stage/bin"
Running ls -l target/universal/stage/bin on ⬢ apps... up, run.5849 (Free)
total 28
-rwx------ 1 u43543 dyno 13969 Jun 30 11:37 apps
-rw------- 1 u43543 dyno  9362 Jun 30 11:37 apps.bat

上記のように、target/universal/stage/bin以下に何が格納されているのか把握できれば、Procfileには以下のように記載すればOKだということが分かると思います。。

Procfile
web: target/universal/stage/bin/apps -Dhttp.port=$PORT

最後に

 Herokuに依存するProcfileの書き方でハマってしまったわけですが、これさえ分かっておけばHerokuのログを見れば解決していける内容(Herokuには依存しない)だと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1