一般流程
创建项目
添加依赖
- rebar.config添加
{deps, [cowboy]}
,依赖的其他形式在昨天的文章中提到,请参看这篇文章 - 修改.app.src,
applications
属性里添加依赖
编译
rebar3里没有 get-dep
这个选项,直接 compile
就会获取依赖。
在shell中运行项目
这个命令会包含项目的ebin以及所有依赖的ebin。
如果项目是一个release
发布
运行之后,会在 _build/default/rel
中创建一个版本的release。
打包(这步会运行release,然后生成一个tar.gz包)
测试环境和生产环境有不同配置?
rebar3相对于rebar有一个很重大的改进,就是增加了profile,什么是profile呢?可以简单理解为不同的环境,用过ruby on rails的同学对这个很好理解。
先来看看profile是怎样定义的,下面直接拿官方文档的例子来说明:
可以看到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脚本做上面这些事情,一方面不通用,另一方面换一批人接手的话上手比较慢。