转载

Erlang 编译工具 Rebar3 使用流程

一般流程

创建项目

rebar3 new [lib|app|release|plugin] myapp

添加依赖

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

编译

rebar3 compile

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

在shell中运行项目

rebar3 shell

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

如果项目是一个release

发布

rebar3 release

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

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

rebar3 tar

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

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

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

{profiles, [

{prod, [{relx, [{dev_mode, false},

{include_erts, true}]}]}

]
}.

可以看到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脚本做上面这些事情,一方面不通用,另一方面换一批人接手的话上手比较慢。

正文到此结束
Loading...