Documentation

You are viewing the documentation for the 2.3.5 release in the 2.3.x series of releases. The latest stable release series is 3.0.x.

§Deploying to Heroku

Heroku is a cloud application platform – a way of building and deploying web apps.

To get started:

  1. Install the Heroku Toolbelt
  2. Sign up for a Heroku account

§Store your application in git

$ git init
$ git add .
$ git commit -m "init"

§Create a new application on Heroku

$ heroku create
Creating warm-frost-1289... done, stack is cedar
http://warm-1289.herokuapp.com/ | [email protected]:warm-1289.git
Git remote heroku added

This provisions a new application with an HTTP (and HTTPS) endpoint and Git endpoint for your application. The Git endpoint is set as a new remote named heroku in your Git repository’s configuration.

§Deploy your application

To deploy your application on Heroku, just use git to push it into the heroku remote repository:

$ git push heroku master
Counting objects: 34, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (34/34), 35.45 KiB, done.
Total 34 (delta 0), reused 0 (delta 0)

-----> Heroku receiving push
-----> Scala app detected
-----> Building app with sbt v0.11.0
-----> Running: sbt clean compile stage
       ...
-----> Discovering process types
       Procfile declares types -> web
-----> Compiled slug size is 46.3MB
-----> Launching... done, v5
       http://8044.herokuapp.com deployed to Heroku

To [email protected]:floating-lightning-8044.git
* [new branch]      master -> master

Heroku will run sbt clean stage to prepare your application. On the first deployment, all dependencies will be downloaded, which takes a while to complete (but will be cached for future deployments).

§Check that your application has been deployed

Now, let’s check the state of the application’s processes:

$ heroku ps
Process       State               Command
------------  ------------------  ----------------------
web.1         up for 10s          target/universal/stage/bin/myapp 

The web process is up. Review the logs for more information:

$ heroku logs
2011-08-18T00:13:41+00:00 heroku[web.1]: Starting process with command `target/universal/stage/bin/myapp`
2011-08-18T00:14:18+00:00 app[web.1]: Starting on port:28328
2011-08-18T00:14:18+00:00 app[web.1]: Started.
2011-08-18T00:14:19+00:00 heroku[web.1]: State changed from starting to up
...

We can also tail the logs in the same manner as we could do at a regular command line. This is useful for debugging:

$ heroku logs -t --app floating-lightning-8044
2011-08-18T00:13:41+00:00 heroku[web.1]: Starting process with command `target/start`
2011-08-18T00:14:18+00:00 app[web.1]: Starting on port:28328
2011-08-18T00:14:18+00:00 app[web.1]: Started.
2011-08-18T00:14:19+00:00 heroku[web.1]: State changed from starting to up
...

Looks good. We can now visit the app by running:

$ heroku open

§Connecting to a database

Heroku provides a number of relational and NoSQL databases through Heroku Add-ons. Play applications on Heroku are automatically provisioned a Heroku Postgres database. To configure your Play application to use the Heroku Postgres database, first add the PostgreSQL JDBC driver to your application dependencies (build.sbt):

libraryDependencies += "postgresql" % "postgresql" % "9.1-901-1.jdbc4"

Then create a new file in your project’s root directory named Procfile (with a capital “P”) that contains the following (substituting the myapp with your project’s name):

web: target/universal/stage/bin/retailos -Dhttp.port=${PORT} -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${DATABASE_URL}

This instructs Heroku that for the process named web it will run Play and override the applyEvolutions.default, db.default.driver, and db.default.url configuration parameters. Note that the Procfile command can be maximum 255 characters long. Alternatively, use the -Dconfig.resource= or -Dconfig.file= mentioned in production configuration page.
Note that the creation of a Procfile is not actually required by Heroku, as Heroku will look in your play application’s conf directory for an application.conf file in order to determine that it is a play application.

§Further learning resources