分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
参考“转载1”和“转载2”就可以了,但需要注意以下两点:
1.如果用rebar - create-app appid=abc 创建 “应用abc”,当前的目录名必须是abc,举例:在abc目录下执行rebar - create-app appid=abc,否则在应用发布的配置文件reltool.config中,配置lib_dirs, ["../../"]项时,找不到应用abc。
2.用rebar生成的abc应用的erlang源码文件为:abc_app.erl abc_sup.erl,如果需要添加新的erlang源代码,新的源代码文件的命名必须是"abc_"开头,例如:abc_server.erl ,否则在执行发布命令rebar generate时,不能将新添加的erlang源代码编译成功的abc_server.beam文件打包进“abc-1.ez”发布包。
转载1:http://www.linezing.com/blog/?p=351
Zfor项目的Rebar改造
本文档用于描述如何使用rebar erlang构建工具,将github上的zfor项目(https://github.com/chaoslawful/zfor)进行改造。
关于改造过程,我们约定:首先建立一个公共的工作目录(本文档中假定为work目录),作为zfor项目改造的主目录,改造过程中的所有操作均在此目录下完成。
1. 准备工作
1.1 下载zfor
1. 首先,在公共目录(work目录)下使用git命令下载zfor:
cd workgit clone https://github.com/chaoslawful/zfor.git |
2. 然后,进入zfor目录,切换到zfor 1.0.10旧版本(目前,github上的master版本是已经rebar改造后的版本,因此我们需要重新下载1.0.10历史版本):
cd zforgit checkout 1.0.10 |
3. Zfor项目的原始项目目录格式如下:
${PROJECT}├── bin├── cfg├── Changelog ├── COPYING ├── doc ├── examples ├── Makefile ├── pkg ├── README ├── src └── THANKS └── TODO |
1.2 下载rebar
1. 首先,在公共目录(work目录)下使用git命令下载rebar:
cd workgit clone https://github.com/basho/rebar.git |
2. 然后,进入rebar目录,编译rebar:
cd rebar./bootstrap |
3. 编译后在该目录下生成rebar二进制执行文件:
1.3 项目规范
Rebar按照OTP设计原则组织项目,在此基础上,zfor项目的rebar改造过程遵循以下项目规范:
${PROJECT}├── c_src├── doc├── ebin ├── include ├── priv ├── src └── test |
其中:
- c_src/ – 保存 Port Driver 相关的 C 代码
- doc/ – 保存文档文件
- ebin/ – 保存 Erlang 目标文件(即 *.beam),OTP 应用的描述文件 *.app 也放置在此
- include/ – 保存 Erlang 头文件(即 *.hrl)
- priv/ – 保存应用特有的文件,例如独立的 C 应用代码、脚本文件、rpm spec 等
- src/ – 保存 Erlang 源代码文件(即 *.erl)
- test/ – 保存项目相关的测试文件及数据,测试本身可以是 EUnit 风格或 common-test 风格的
2. 改造过程
2.1 创建rebar项目
首先,在公共目录(work目录)下,创建zfor的rebar改造项目目录:zfor_rebar,将1.2节生成的rebar二进制执行文件拷贝到该目录,并在该目录下创建rebar项目:
$ mkdir zfor_rebar$ cd zfor_rebar$ cp ../rebar/rebar ./$ ./rebar create-app appid=zfor ==> zfor_rebar (create-app) Writing src/zfor.app.src Writing src/zfor_app.erl Writing src/zfor_sup.erl |
2.2 创建必要的子目录
在zfor_rebar目录下,按照1.3节中的项目规范,建立必要的项目子目录:
$ cd zfor_rebar$ mkdir c_src$ mkdir doc$ mkdir ebin $ mkdir include $ mkdir priv $ mkdir test |
备注:src目录已经在创建rebar项目时自动生成。
2.3 迁移zfor项目文件
按照1.3节中的项目规范,进行zfor项目文件的迁移:
1. c_src部分:
暂无。
2. doc部分:
$ cd zfor$ mv ./doc/* ../zfor_rebar/doc/ |
3. ebin部分:
暂无。
4. include部分:
$ cd zfor$ cd src/zfor/$ mv ./include/* ../../../zfor_rebar/include/ |
5. priv部分:
$ cd zfor$ cd src$ mv ./erlang_zfor/ ../../zfor_rebar/priv/$ mv ./java_zfor/ ../../zfor_rebar/priv/ $ mv ./libzfor/ ../../zfor_rebar/priv/ $ mv ./php_zfor/ ../../zfor_rebar/priv/ $ mv ./python_zfor/ ../../zfor_rebar/priv/ $ cd .. $ mv ./bin ./scripts $ mv ./scripts/ ../zfor_rebar/priv/ $ mv ./cfg/ ../zfor_rebar/priv/ $ mv ./examples/ ../zfor_rebar/priv/ $ mv ./pkg/ ../zfor_rebar/priv/ |
6. src部分:
$ cd zfor$ cd src/zfor/$ mv ./src/* ../../../zfor_rebar/src/ |
7. test部分:
$ cd zfor$ cd src/zfor/$ mv ./test/* ../../../zfor_rebar/test/ |
8. 其他部分
$ cd zfor$ mv Changelog ../zfor_rebar/$ mv COPYING ../zfor_rebar/$ mv README ../zfor_rebar/ $ mv THANKS ../zfor_rebar/ $ mv TODO ../zfor_rebar/ |
至此,已经将zfor项目迁移到了zfor_rebar目录下,最终的目录结构如下:
2.4 修改zfor.app.in配置文件
1. 进入zfor_rebar目录下的src目录,根据项目名,将zfor.app.in重命名为zfor_rebar.app.src:
$ cd zfor_rebar/src$ mv zfor.app.in zfor.app.src |
2. 编辑zfor.app.src,将“{vsn, “%VSN%”}”改为“{vsn, “1.0.5″}”,将“{conf_path, “%CONFPATH%”}”改为“{conf_path, “/usr/local/etc/zfor”}”。
$ cd zfor_rebar/src$ vim zfor.app.src |
2.5 编译项目
使用rebar compile命令编译zfor:
$ cd zfor_rebar$ ./rebar compile==> zfor_rebar (compile) Compiled src/zfor_app.erl src/zfor_hostlist.erl:80: Warning: http:request/4 is deprecated and will be removed in R15B; use httpc:request/4 Compiled src/zfor_hostlist.erl Compiled src/zfor_sup.erl Compiled src/zfor_caretaker.erl src/zfor_server.erl:50: Warning: NOT OPTIMIZED: called function handle_req/3 does not begin with a suitable binary matching instruction src/zfor_server.erl:99: Warning: NOT OPTIMIZED: sub binary used by erlang:binary_to_list/1 Compiled src/zfor_server.erl Compiled src/zfor_httpclient.erl Compiled src/zfor_util.erl Compiled src/zfor_main.erl src/zfor_config.erl:240: Warning: http:request/4 is deprecated and will be removed in R15B; use httpc:request/4 src/zfor_config.erl:461: Warning: http:request/4 is deprecated and will be removed in R15B; use httpc:request/4 Compiled src/zfor_config.erl |
2.6 发布项目
1. 在项目根目录下,创建rel发布目录,然后创建一个node用于发布:
$ $ cd $ == ==> rel (create-node) Writing reltool.config Writing files/erl Writing files/nodetool Writing files/zfor Writing files/app.config Writing files/vm.args $ cd |
2. 修改rel/reltool.config文件(其中**之间是需要修改的地方):
{sys,
|