This is a Heroku buildpack for Elixir apps. It uses Mix.
$ heroku config:add BUILDPACK_URL="https://github.com/goshakkk/heroku-buildpack-elixir.git" -a YOUR_APP
or
$ heroku create --buildpack "https://github.com/goshakkk/heroku-buildpack-elixir.git"
The Erlang/OTP release version that will be used to build and run your
application is now sourced from a dotfile called .preferred_otp_version
. It
needs to be the branch or tag name from the http://github.com/erlang/otp
repository, and further, needs to be one of the versions that precompiled
binaries are available for.
Currently supported OTP versions:
- master (R17A)
- OTP_R16B02
- OTP_R16B01
- OTP_R16B
- OTP_R15B03
- OTP_R15B02
- OTP_R15B01
To select the version for your app:
$ echo OTP_R16B02 > .preferred_otp_version
$ git commit -m "Select R16B02 as preferred OTP version" .preferred_otp_version
If no version is explicitly specified, master
will be used.
The application will be compiled and run using Elixir master and Mix.
You can specify custom branch or tag name from the
https://github.com/elixir-lang/elixir repository in the
.preferred_elixir_version
dotfile.
Heroku needs a Procfile in order to run your application. Create a Procfile with a web
process defined:
$ echo 'web: mix server -p $PORT' > Procfile
The buildpack sets MIX_ENV=prod
so you don't have to.
Important Note: Single quotes are important here. $PORT
is an environment variable supplied by Heroku. If you use double quotes
in the above echo
call, your local shell will try to interpolate the contents, and you'll end up with -p
and not -p $PORT
.
$ echo 'web: mix run --no-halt' > Procfile
You should bind to port specified in PORT
environment variable:
{ :ok, _ } = :cowboy.start_http(
:http, 100,
[port: port(System.get_env("PORT"))],
[env: [dispatch: dispatch]]
)
def port(nil), do: 8080
def port(value) do
binary_to_integer(value)
end
Important Note: If you bind to any other port than the assigned one, your process will be killed with an R11 error code.
heroku-elixir-buildpack
supports only applications which use
Mix to manage
dependencies.
$ git push heroku master
You may need to write a new commit and push if your code was already up to date.