Skip to content
vic

hrefhref/booter

Boot an Elixir application step by step (inspired by RabbitMQ)

hrefhref/booter.json
{
"createdAt": "2014-01-27T15:41:42Z",
"defaultBranch": "master",
"description": "Boot an Elixir application step by step (inspired by RabbitMQ)",
"fullName": "hrefhref/booter",
"homepage": "",
"language": "Elixir",
"name": "booter",
"pushedAt": "2019-07-22T08:40:00Z",
"stargazersCount": 23,
"topics": [
"elixir",
"erl",
"erlang"
],
"updatedAt": "2024-06-27T12:13:51Z",
"url": "https://github.com/hrefhref/booter"
}

Build Status

Complex applications can be composed of multiple subsystems or groups or processes, independants or dependants of each others. And starting theses subsystems is not easy as :application.start/2 or a supervisor child spec.

Booter allows modules to define a list of boot steps using Module attributes. Each step define what to call, what it requires and enables. A directed acyclic graph is then created from theses steps, and called in the correct order.

Inspired/adapted to Elixir by RabbitMQ’s boot process implemented in [rabbit.erl][1] and [rabbit_misc.erl][2]. For an in-depth explaination, read Alvaro Videla’s [article][3] and [slides][4].

[Read the API documentation for full usage][exdoc].

Using Booter and the boot_step/3 macro:

defmodule MyModule do
use Booter
# without name (__MODULE__ is assumed)
boot_step mfa: {mod, fun, args}, requires: :required_step, enables: :another_step
# with name
boot_step :awesome_name, mfa: {mod, fun, args}, requires: :required_step, enables: :another_step
# With name and description
boot_step :awesome_name, "Unicorn generator", mfa: {mod,fun,args}, requires: :rainbow_server, enables: :magic
end

Just call Booter.boot!. Can raise exceptions.

[exdoc] !: http://eraserewind.github.io/booter/ [1] !: https://github.com/rabbitmq/rabbitmq-server/blob/master/src/rabbit.erl [2] !: https://github.com/rabbitmq/rabbitmq-server/blob/master/src/rabbit_misc.erl [3] !: https://github.com/videlalvaro/rabbit-internals/blob/master/rabbit_boot_process.md [4] !: http://fr.slideshare.net/old_sound/rabbitmq-boot-system