Rebar3使用流程
一般流程
创建项目
rebar3 new [lib|app|release|plugin] myapp</div> </pre></div>添加依赖
- rebar.config添加{deps, [cowboy]},依赖的其他形式在昨天的文章中提到,请参看这篇文章
- 修改.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究竟有什么好处?举个例子:
{include_erts, false},开发时使用这个配置,在执行rebar3 release时,只是创建一个ERTS的软链接,省下了拷贝文件的时间。在生产环境下,你可以创建一个product的profile,里面定义{include_erts, true},这样执行rebar3 as product release时,ERTS会被拷贝到发布文件夹中,在服务器上部署不需要安装Erlang。
{dev_mode, true},开发时使用这个配置,会把你的项目做一个软链接,这样你修改了代码以后,在Erlang shell里执行热更新就行了。说到热更新,推荐rustyio/sync,在开发时加入这个依赖,会自动扫描最新编译的代码进行热更,再也不用手动执行l(module_name)了。如果你有更好的方法也欢迎提出。
总结
希望rebar3的出现能规范Erlang的开发流程,现在很多Erlang项目还是自己写shell脚本做上面这些事情,一方面不通用,另一方面换一批人接手的话上手比较慢。
来自:http://blog.goofansu.com/2015/08/02/rebar3-workflow.html