Rebar3使用流程

leonplion 9年前

一般流程

创建项目

 
rebar3 new [lib|app|release|plugin] myapp
</div> </pre></div>

添加依赖

  1. rebar.config添加{deps, [cowboy]},依赖的其他形式在昨天的文章中提到,请参看这篇文章
  2. 修改.app.src,applications属性里添加依赖

编译

 
rebar3 compile
</div> </pre></div>

rebar3里没有get-dep这个选项,直接compile就会获取依赖。

在shell中运行项目

 
rebar3 shell
</div> </pre></div>

这个命令会包含项目的ebin以及所有依赖的ebin。

如果项目是一个release

发布

 
rebar3 release
</div> </pre></div>

运行之后,会在_build/default/rel中创建一个版本的release。

打包(这步会运行release,然后生成一个tar.gz包)

 
rebar3 tar
</div> </pre></div>

测试环境和生产环境有不同配置?

rebar3相对于rebar有一个很重大的改进,就是增加了profile,什么是profile呢?可以简单理解为不同的环境,用过ruby on rails的同学对这个很好理解。

先来看看profile是怎样定义的,下面直接拿官方文档的例子来说明:

 
{profiles, [
</div>
{prod, [{relx, [{dev_mode, false},
</div>
{include_erts, true}]}]}
</div>
]
</div>
}.
</div> </pre></div>

可以看到profiles是一个列表,我们可以定义不同的profile,一个profile就是一个环境,比如dev,product,test。

在命令行中可以通过rebar3 as PROFILE command来使用特定的profile执行命令,如果不指定就是用rebar.config的默认配置,注意,profile的配置会覆盖同名默认配置。

as命令也可以指定多个profile,用逗号隔开,这个下次专门讲profile的时候再展开。

这个profile究竟有什么好处?举个例子:

  1. {include_erts, false},开发时使用这个配置,在执行rebar3 release时,只是创建一个ERTS的软链接,省下了拷贝文件的时间。在生产环境下,你可以创建一个product的profile,里面定义{include_erts, true},这样执行rebar3 as product release时,ERTS会被拷贝到发布文件夹中,在服务器上部署不需要安装Erlang。

  2. {dev_mode, true},开发时使用这个配置,会把你的项目做一个软链接,这样你修改了代码以后,在Erlang shell里执行热更新就行了。说到热更新,推荐rustyio/sync,在开发时加入这个依赖,会自动扫描最新编译的代码进行热更,再也不用手动执行l(module_name)了。如果你有更好的方法也欢迎提出。

总结

希望rebar3的出现能规范Erlang的开发流程,现在很多Erlang项目还是自己写shell脚本做上面这些事情,一方面不通用,另一方面换一批人接手的话上手比较慢。



来自:http://blog.goofansu.com/2015/08/02/rebar3-workflow.html