构建REBAR:
git clone git://github.com/rebar/rebar.git // 获取rebar
cd rebar // 进入rebar的目录
./bootstrap // 创建可被调用的rebar文件
==> rebar (compile) // 构建 REBAR 完成
./rebar create-app appid=myapp // 构建一个叫做myapp的项目
myapp.app.src // 用于生成 ./myapp/ebin 文件夹下的myapp.app文件
myapp_app.erl // 启动应用的入口模块
myapp_sup.erl // myapp应用的根监督进程
./rebar compile
清理已经生成的编译文件
./rebar clean
清理后编译
./rebar clean compile
用 REBAR 来打包
cd ./myapp // 进入到myapp项目的根目录
mk rel // 创建rel文件夹,用来存放打包后的myapp程序
cd rebar
../rebar create-node nodeid=myapp // 创建发布的程序名称, 注意:虽然是叫node,但是你千万不要写一个类似
NODE@HOST的名称,这样会在生成发布文件的时候报错.此时在rel文件夹下,生成了1个 files 文件夹和 reltool.config文件, 接下来就要编辑这个reltool.config的文件
erlang版本15B01或者更新的版本将
{app, exemplar, [{mod_cond, app}, {incl_cond, include}]}修改成
{app, exemplar, [{mod_cond, app}, {incl_cond, include}, {lib_dir, ".."}]}就是在最后加了一个 {lib_dir, ".."}
低于15B01的erlang版本则将
{sys, [ {lib_dirs, []},修改成
{sys, [ {lib_dirs, ["../apps"]}, // myapp存放目录的上级目录
注释:
如果你的应用调用了 sasl, os_mon, crypto 或者其它的应用,需要在
{sys, [ ..... {rel, myapp, "版本", [将应用添加在这个地方]}, // ....代表其它的配置项,此处省略这么做的原因是,rebar自身生成的时候也会启动一些应用,这个可能会和应用内的启动操作发生冲突,所以需要在这个地方提前由rebar的编译程序来启动.
erlang版本15B01或更新的版本,在rebar.config中添加
{sub_dirs, ["rel"]}低于15B01的版本,在rebar.config中添加
{sub_dirs, ["apps/myapp", "rel"]}.
接下来就应该创建和发布myapp的发布版本了
./rebar clean compile generate // 重点是generate, 在生成之前一定要对整个项目编译完成一次注释: 如果你想要自己设定启动后的节点的名称,请在执行 generate前先修改一下 /myapp/rel/files/ 文件夹下的vm.args
所有的文件生成后,就可以测试这个发布的包好不好用啦 ^_^
./myapp/rel/myapp/bin/myapp start // 启动myapp
./myapp/rel/myapp/bin/myapp attach // 检查myapp的启动状态并调出erl操作环境
application:which_applications(). // 获取当前正在运行的应用
.................................................... // 你懂的
这样就完成了发布的流程. 当然REBAR还可以使用模板,还可以做其它的扩展,这个地方我只是做一个简单流程的陈述