Heroku has a good getting started guide with Scala.
If you know the basic of Heroku, and has started with Typesafe’s Scala + Play! framework, there is 1 more thing you should to know.
You should know how to properly configure your local development environment.
Add the start script plugin
Typesafe’s start script plugin helps to generate a
target/start script (you will use later).
Create the file
project/build.sbt with this
resolvers += Classpaths.typesafeResolver addSbtPlugin("com.typesafe.startscript" % "xsbt-start-script-plugin" % "0.5.3")
Create the file
Procfile in the root folder. Enter this line:
web: target/start Web
Build your app locally
You need to run this EVERYTIME before you run the app
$ sbt clean compile stage
Run your app locally
Run your app using foreman
$ foreman run
The app will run on port 5000 (instead of usual 9000).
Note: When you change your code, you need to exit,
sbt clean compile run, then
foreman start again..
Environment Variables (.env)
.env file at root is for storing environment variables. This file is in
.gitignore, because it usually contains API credentials or environment specific settings.
For example, credentials for mysql/redis/s3/etc is different between local and production environment.
Enter your local environment variables in
.env like this
Enter your production environment variables using heroku command as such
$ heroku config:add S3_KEY=superkey $ heroku config:add S3_SECRET=supersecret
Then in your scala code, you can access the respective environment variables as such:
val s3Key = System.getenv("S3_KEY")
Better way to run your app locally
You could use
.env in your local development workspace as described in the above sections.
However, it would inefficient to
sbt clean compile run and then
foreman start everytime you change your code and run.
So the better way is to store directly in your computer’s environment variables.
$ export S3_KEY=mykey
To ensure it’s stored
$ echo $S3_KEY
With that, your could
sbt run as per normal.