9 Development & Deployment
9.1 Creating Projects with Rebar
In this section we'll be exploring how rebar can be used to manage LFE projects.
9.1.1 Dependencies
You're going to need to have an Erlang. We recommend using kerl, as deponstrated in the next section. However, you may already have one set up, in which case you're good for the next step.
9.1.2 Installation
$ curl -L -O https://raw.github.com/wiki/rebar/rebar/rebar
$ mv rebar /usr/local/bin/
$ chmod a+x /usr/local/bin/rebar
Make sure everything's working as expected:
$ rebar h
This will give you output like the following:
Usage: rebar [-h] [-c] [-v <verbose>] [-V] [-f] [-D <defines>] [-j <jobs>]
[-C <config>] [-p] [var=value,...] <command,...>
-h, --help Show the program options
-c, --commands Show available commands
-v, --verbose Verbosity level (-v, -vv, -vvv, --verbose 3). Default: 0
-V, --version Show version information
-f, --force Force
-D Define compiler macro
-j, --jobs Num concurrent workers a command may use. Default: 3
-C, --config Rebar config file to use
-p, --profile Profile this run of rebar
var=value rebar global variables (e.g. force=1)
command Command to run (e.g. compile)
9.1.2 What is a Project?
The first question we should probably address is this: How are we defining a project?
An LFE project is a set of modules developed and distributed to accomplish a
particular goal. The project should have a rebar configuration file, a source
directory with .lfe
files in it, possibly an include directory, and (ideally)
unit tests in a test
directory.
9.1.2 Project Structure
Let's expand upon the project definition given above, focusing on the directory structure of a prototypical project and some of the files one might find in an LFE project.
├── ebin
│ └── libexample.app
├── src
│ └── libexample.lfe
├── Makefile
├── README.md
└── rebar.config
This is from a sample project whose purpose is to provide a library for use by other LFE (or Erlang!) projects. More on that below.
Rebar supports LFE files. All that it needs is the standard rebar.config
and
an .app
file in the ebin
directory. With these, Rebar will be able to
download the project dependencies and compile the *.lfe
files in src
to the
ebin
directory as *.beam
files.
9.1.3 Project Dependencies
Dependencies are handled very nicely with Rebar: just add a git repo in your
rebar.config
file like so:
{deps, [
{lfe, ".*", {git, "git://github.com/rvirding/lfe.git", "develop"}}
]}.
Any dependencies listed here will be downloaded with the rebar get-deps
command. Once downloaded, issuing the rebar compile
command will not only
compile your project's src/*
files into its ebin
directory, but will compile
all dependency project source code as well.