Rebar3 Erlang

Contoh penggunaan dasar

Membuat release

Membuat release / project baru

$ rebar3 new release your_app_name
===> Writing your_app_name/apps/your_app_name/src/your_app_name_app.erl
===> Writing your_app_name/apps/your_app_name/src/your_app_name_sup.erl
===> Writing your_app_name/apps/your_app_name/src/your_app_name.app.src
===> Writing your_app_name/rebar.config
===> Writing your_app_name/config/sys.config
===> Writing your_app_name/config/vm.args
===> Writing your_app_name/.gitignore
===> Writing your_app_name/LICENSE
===> Writing your_app_name/README.md

$ cd your_app_name

Kita pilih pembuatan HTTP JSON API sebagai contoh hasil project. Library web server yang kita gunakan adalah Cowboy , dan library untuk handle JSON nya kita menggunakan Jiffy .

Buka file rebar.config tambahkan library dependencies ke section deps. Dan tambahkan plugins rebar3_run di section plugins

...
...
...
{deps, [
  {cowboy, {git, "https://github.com/ninenines/cowboy", {tag, "2.6.3"}}},
  {jiffy, {git, "https://github.com/davisp/jiffy", {tag, "0.15.2"}}}
]}.

{plugins, [rebar3_run]}.
...
...
...

Buka file your_app_name/apps/your_app_name/src/your_app_name_app.erl. Isikan code seperti berikut:

%%%-------------------------------------------------------------------
%% @doc your_app_name public API
%% @end
%%%-------------------------------------------------------------------

-module(your_app_name_app).

-behaviour(application).

-export([start/2, stop/1]).

start(_StartType, _StartArgs) ->
  Routes = [
    {'_', [
      {"/", route_root_handler, []}
    ]}
  ],
  Dispatch = cowboy_router:compile(Routes),
  {ok, _} = cowboy:start_clear(
    http,
    [{port, 8080}],
    #{env => #{dispatch => Dispatch}}
  ),
  your_app_name_sup:start_link().

stop(_State) ->
  ok.

%% internal functions

Buat file baru bernama route_root_handler.erl di your_app_name/apps/your_app_name/src/. Isikan code seperti berikut:

-module(route_root_handler).

-export([init/2]).

init(Req, State) ->
  RespStructure = {[
    {code, <<"ERLANG HANDLER">>},
    {message, <<"ERLANG HANDLER">>},
    {data, {[
      {contents, [
        {[{name, <<"Oka">>}, {email, <<"okaprinarjaya@gmail.com">>}]},
        {[{name, <<"Robert Virding">>}, {email, <<"rvirding@erlang.org">>}]},
        {[{name, <<"Joe Armstrong">>}, {email, <<"joe.armstrong@erlang.org">>}]},
        {[{name, <<"Mike">>}, {email, <<"mike@erlang.org">>}]},
        {[{name, <<"Tony Hoare">>}, {email, <<"tony.hoare@erlang.org">>}]}
      ]},
      {pagingState, <<"12oimfoeimfw85p598utw4igjin">>}
    ]}}
  ]},
  Request = cowboy_req:reply(
    200,
    #{<<"content-type">> => <<"application/json">>},
    jiffy:encode(RespStructure),
    Req
  ),
  {ok, Request, State}.

Buka file your_app_name/apps/your_app_name/src/your_app_name.app.src. Tambahkan Cowboy dan Jiffy sebagai application dependencies di section applications.

...
...
...
{applications, [
    kernel,
    stdlib,
    cowboy,
    jiffy
  ]},
...
...
...

Lanjutkan jalankan perintah-perintah berikut:

$ cd your_app_name
$ rebar3 compile
$ rebar3 release

Jika ada masalah / error dengan plugin rebar3_run saat menjalankan perintah rebar3 compile, maka kamu perlu mengubah file: your_app_name/_build/default/plugins/rebar3_run/c_src/Makefile. Ubah file Makefile HANYA pada baris: 34 s/d 38. Dengan perubahan sebagai berikut:

...
...
...
CFLAGS += -fPIC -I "$(ERTS_INCLUDE_DIR)" -I "$(ERL_INTERFACE_INCLUDE_DIR)"
CXXFLAGS += -fPIC -I "$(ERTS_INCLUDE_DIR)" -I "$(ERL_INTERFACE_INCLUDE_DIR)"

LDLIBS += -L "$(ERL_INTERFACE_LIB_DIR)" -lerl_interface -lei
LDFLAGS += -shared
...
...
...

Hasil dari perintah rebar3 release adalah sebuah direktori di your_app_name/_build/default/rel/your_app_name. Nyalakan service HTTP JSON API dengan perintah: ./_build/default/rel/your_app_name/bin/your_app_name start. Untuk menghentikan service, jalankan perintah ./_build/default/rel/your_app_name/bin/your_app_name stop.

Kamu mengcopy direktori your_app_name/_build/default/rel/your_app_name ke direktori manapun karena itu adalah sebuah release yang sudah lengkap include dengan semua library yang dibutuhkan.

Start aplikasi di Erlang shell

Jika kamu belum membutuhkan menjalankan aplikasi kamu sebagai aplikasi yang berjalan sebagai OS daemon, maka kamu bisa menjalankan perintah rebar3 run secara langsung tanpa perlu menjalankan rebar3 compile, rebar3 release.

Perintah rebar3 run akan membuka Erlang shell yang mana di dalam Erlang shell kamu bisa melakukan segala hal yang terkait dengan level development.

Perintah dasar

Rebar3 memiliki beberapa perintah dasar untuk penggunaan yang paling dasar yaitu: new, compile, release.

App atau Release

Di dalam perintah new ada opsi app, dan release.

App atau Release adalah jenis project. Jenis project App adalah project yg berisikan hanya satu application.

Written on June 10, 2019