Skip to content
joewilliams edited this page Mar 2, 2011 · 11 revisions

Rebar makes building Erlang releases easy. One of the advantages of using OTP releases is the ability to perform hot-code upgrades.

To do this you need to build a upgrade package that contains the built modules and instructions telling OTP how to upgrade your application. Those instructions come in the form of appup files and rebar can build them for you. The goal of the generate-appups command is to at the very least create a skeleton to get you started on a more complex appup, in simple cases the appup it creates will be usable without any edits. If an appup file already exists a new one will not be created. Once you have your appup files created you can build a upgrade package with the generate-upgrade command.

In the test/upgrade_project directory of the rebar repo you will find an example "dummy" release you can use as an example of how to run hot-code upgrades using rebar. The below instructions should apply closely to your release.

Building version 0.1

rebar compile
rebar generate
mv rel/dummy rel/dummy_0.1
rebar clean
# start the release:
cd rel/dummy_0.1
bin/dummy console

erl> dummy_server:get_state().
erl> dummy_server:set_state(123).
erl> dummy_server:get_state().

Building version 0.2

# Now, in another terminal we prepare an upgrade..

# change release version numbers from 0.1 to 0.2 in
$EDITOR apps/dummy/src/dummy.app.src
$EDITOR rel/reltool.config

rebar compile
rebar generate
rebar generate-appups previous_release=dummy_0.1
rebar generate-upgrade previous_release=dummy_0.1

# Examine contents of upgrade package if you wish:
tar -zvtf rel/dummy_0.2.tar.gz

Deploying with release_handler

mv rel/dummy_0.2.tar.gz rel/dummy_0.1/releases/

# Now use release_handler in the running erlang console for the deploy:

erl> release_handler:unpack_release("dummy_0.2").
erl> release_handler:install_release("0.2").
erl> release_handler:make_permanent("0.2").

erl> release_handler:which_releases().
erl> dummy_server:get_state().

Caveats:

  • Appup and upgrade generation do not work with zipped applications (.ez extension).
  • Downgrade instructions are not currently generated, only upgrade instructions.