使用rebar创建一个otp项目
来源:互联网 发布:crm系统java源代码 编辑:程序博客网 时间:2024/05/29 19:53
一、使用rebar创建一个otp项目
第1步:创建一个项目目录
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test$ mkdir myapp; cd myapp
第2步:将rebar文件复制到这个目录,也可以直接下载
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test$ wget http://cloud.github.com/downloads/basho/rebar/rebar && chmod u+x rebar
--2011-05-13 09:37:13-- http://cloud.github.com/downloads/basho/rebar/rebar
正在解析主机 cloud.github.com... 204.246.165.144, 204.246.165.231, 204.246.165.99, ...
正在连接 cloud.github.com|204.246.165.144|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 102570 (100K) [application/octet-stream]
正在保存至: “rebar”
100%[======================================>] 102,570 74.4K/s in 1.3s
2011-05-13 09:37:23 (74.4 KB/s) - 已保存 “rebar” [102570/102570])
注:rebar项目地址git地址:https://github.com/basho/rebar.git ($ git clone https://github....),git下载后make生成一个rebar文件也是可以的。
第3步:创建一个OTP项目
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ ./rebar create-app appid=myapp
==> myapp (create-app)
Writing src/myapp.app.src
Writing src/myapp_app.erl
Writing src/myapp_sup.erl
第4步:增加一个gen_server,可以设置状态值和得到状态,具体代码看文件,并修改myapp_sup.erl
init([]) ->
Server1 = {myapp_server,
{myapp_server, start_link, []},
permanent, 5000, worker, [myapp_server]},
{ok, {{one_for_one, 5, 10}, [Server1]}}.
第5步:修改myapp.app.src
增加配置项:
{modules, [
myapp_app,
myapp_sup,
myapp_server
]},
第4步:编译
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ ./rebar compile
==> myapp (compile)
Compiled src/myapp_app.erl
Compiled src/myapp_sup.erl
Compiled src/myapp_server.erl
第5步:测试
rebar同时支持 eunit 和 common_test两种测试框架,下面例子将使用eunit方式进行一个简单测试
1)打开 src/myapp_app.erl文件,在 -export() 后加入如下代码:
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
-endif.
同时在文件中加入测试函数(注:所有的测试函数都需要被包含在-ifdef(TEST)和-endif中):
-ifdef(TEST).
%%测试函数
simple_test() ->
ok = application:start(myapp),
?assertNot(undefined == whereis(myapp_sup)).
-endif.
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ cat src/myapp_app.erl
-module(myapp_app).
-behaviour(application).
%% Application callbacks
-export([start/2, stop/1]).
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
-endif.
%% ===================================================================
%% Application callbacks
%% ===================================================================
start(_StartType, _StartArgs) ->
myapp_sup:start_link().
stop(_State) ->
ok.
-ifdef(TEST).
%%测试函数
simple_test() ->
ok = application:start(myapp),
?assertNot(undefined == whereis(myapp_sup)).
-endif.
2)进行单元测试
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ ./rebar compile eunit
==> myapp (compile)
Compiled src/myapp_app.erl
Compiled src/myapp_sup.erl
==> myapp (eunit)
Compiled src/myapp_app.erl
Test passed.
二、发布版本
第1步:创建apps目录
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ mkdir apps
第2步:在apps目录下创建myapp
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ mkdir apps/myapp
第3步:将src文件移动到apps/myapp目录下
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ mv src apps/myapp/src
第4步:创建rel目录
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ mkdir rel
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ cd rel
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp/rel$
第5步:create the node
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp/rel$ ../rebar create-node nodeid=myapp
==> rel (create-node)
Writing reltool.config
Writing files/erl
Writing files/nodetool
Writing files/myapp
Writing files/app.config
Writing files/vm.args
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp/rel$ ls -lR
.:
总用量 8
drwxr-xr-x 2 bland bland 4096 2011-05-13 09:55 files
-rw-r--r-- 1 bland bland 783 2011-05-13 09:55 reltool.config
./files:
总用量 28
-rw-r--r-- 1 bland bland 334 2011-05-13 09:55 app.config
-rwxr--r-- 1 bland bland 1120 2011-05-13 09:55 erl
-rwxr--r-- 1 bland bland 4370 2011-05-13 09:55 myapp
-rwxr--r-- 1 bland bland 4819 2011-05-13 09:55 nodetool
-rw-r--r-- 1 bland bland 417 2011-05-13 09:55 vm.args
第6步:创建一个rebar.config文件,并增加如下信息:
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp/rel$ cd ..
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ cat << EOF > rebar.config 【回车】
> {sub_dirs, ["apps/myapp","rel"]}. 【回车】
> {cover_enabled, true}. 【回车】
> EOF 【回车】
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ cat rebar.config
{sub_dirs, ["apps/myapp","rel"]}.
{cover_enabled, true}.
第7步:修改rel/reltool.config 文件
找到 {lib_dirs, []},...
修改为:{lib_dirs, ["../apps"]},
找到 {rel, "myapp", "1",
[
kernel,
stdlib,
sasl
]},...
修改为:
{rel, "myapp", "1",
[
kernel,
stdlib,
sasl,
myapp
]},
找到 {excl_sys_filters, ["^bin/.*",
第1步:创建一个项目目录
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test$ mkdir myapp; cd myapp
第2步:将rebar文件复制到这个目录,也可以直接下载
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test$ wget http://cloud.github.com/downloads/basho/rebar/rebar && chmod u+x rebar
--2011-05-13 09:37:13--
正在解析主机 cloud.github.com... 204.246.165.144, 204.246.165.231, 204.246.165.99, ...
正在连接 cloud.github.com|204.246.165.144|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 102570 (100K) [application/octet-stream]
正在保存至: “rebar”
100%[======================================>] 102,570
2011-05-13 09:37:23 (74.4 KB/s) - 已保存 “rebar” [102570/102570])
注:rebar项目地址git地址:https://github.com/basho/rebar.git ($ git clone https://github....),git下载后make生成一个rebar文件也是可以的。
第3步:创建一个OTP项目
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ ./rebar create-app appid=myapp
==> myapp (create-app)
Writing src/myapp.app.src
Writing src/myapp_app.erl
Writing src/myapp_sup.erl
第4步:增加一个gen_server,可以设置状态值和得到状态,具体代码看文件,并修改myapp_sup.erl
init([]) ->
第5步:修改myapp.app.src
增加配置项:
第4步:编译
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ ./rebar compile
==> myapp (compile)
Compiled src/myapp_app.erl
Compiled src/myapp_sup.erl
Compiled src/myapp_server.erl
第5步:测试
rebar同时支持 eunit 和 common_test两种测试框架,下面例子将使用eunit方式进行一个简单测试
1)打开 src/myapp_app.erl文件,在 -export() 后加入如下代码:
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
-endif.
同时在文件中加入测试函数(注:所有的测试函数都需要被包含在-ifdef(TEST)和-endif中):
-ifdef(TEST).
%%测试函数
simple_test() ->
-endif.
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ cat src/myapp_app.erl
-module(myapp_app).
-behaviour(application).
%% Application callbacks
-export([start/2, stop/1]).
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
-endif.
%% ===================================================================
%% Application callbacks
%% ===================================================================
start(_StartType, _StartArgs) ->
stop(_State) ->
-ifdef(TEST).
%%测试函数
simple_test() ->
-endif.
2)进行单元测试
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ ./rebar compile eunit
==> myapp (compile)
Compiled src/myapp_app.erl
Compiled src/myapp_sup.erl
==> myapp (eunit)
Compiled src/myapp_app.erl
二、发布版本
第1步:创建apps目录
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ mkdir apps
第2步:在apps目录下创建myapp
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ mkdir apps/myapp
第3步:将src文件移动到apps/myapp目录下
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ mv src apps/myapp/src
第4步:创建rel目录
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ mkdir rel
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ cd rel
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp/rel$
第5步:create the node
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp/rel$ ../rebar create-node nodeid=myapp
==> rel (create-node)
Writing reltool.config
Writing files/erl
Writing files/nodetool
Writing files/myapp
Writing files/app.config
Writing files/vm.args
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp/rel$ ls -lR
.:
总用量 8
drwxr-xr-x 2 bland bland 4096 2011-05-13 09:55 files
-rw-r--r-- 1 bland bland
./files:
总用量 28
-rw-r--r-- 1 bland bland
-rwxr--r-- 1 bland bland 1120 2011-05-13 09:55 erl
-rwxr--r-- 1 bland bland 4370 2011-05-13 09:55 myapp
-rwxr--r-- 1 bland bland 4819 2011-05-13 09:55 nodetool
-rw-r--r-- 1 bland bland
第6步:创建一个rebar.config文件,并增加如下信息:
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp/rel$ cd ..
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ cat << EOF > rebar.config 【回车】
> {sub_dirs, ["apps/myapp","rel"]}. 【回车】
> {cover_enabled, true}. 【回车】
> EOF 【回车】
bland@thinkpad:~/workspace/黑米/研发/项目/SiteLyst3/rebar_test/myapp$ cat rebar.config
{sub_dirs, ["apps/myapp","rel"]}.
{cover_enabled, true}.
第7步:修改rel/reltool.config 文件
找到 {lib_dirs, []},...
找到 {rel, "myapp", "1",
找到 {excl_sys_filters, ["^bin/.*",