浏览 2999 次
锁定老帖子 主题:reltool使用入门
精华帖 (0) :: 良好帖 (12) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-20
最后修改:2010-07-15
先来看看典型的目录结构 /home/arksea |--client |--ebin |--include |--nbproject |--priv |--src |--test 用reltool生成目标系统的过程为 1、写配置文件client.config 2、启动erl,如果提示需要以smp方式启动要加上参数erl -smp 3、生成目标系统 Eshell V5.7.3 (abort with ^G) 1> {ok,Server}=reltool:start_server([{config,"client.config"}]). {ok,<0.32.0>} 2> reltool:create_target(Server, "target"). ok 3> 就这么简单,我们看看生成的目标系统的目录结构 target |--bin |--erts-5.7.3 |--release | |--0.1 | | |--client.boot | | |--client.rel | | |--client.script | |--start_erl.data |--lib |--client-0.1 | |--priv |--client-0.1.ez |--erts-5.7.3.ez |--kernel-2.13.3.ez .... 对,没错,所有的lib下的beam文件都被打包到一个.ez压缩包中了,这对于嵌入到客户端的系统来说是个好特性,啥时候再支持一下包认证就更棒了。 二、部署描述文件实例 看完了reltool的效果,现在来看看重点,也就是部署描述文件client.config的结构 下面是这个例子的部署描述文件,因为是嵌入到客户端程序中所以要尽量小,剔除了比较多的东西,服务端系统通常无需使用如此复杂的包含规则。最终的target目录里只剩12M的东东,还算可以接受,当然如果你愿意应该还是有不少东西是可以剔除的。 {sys,[{lib_dirs,["/home/arksea"]}, {boot_rel,"client"}, {rel,"client","0.1",[kernel,stdlib,sasl,client]}, {debug_info, keep}, {incl_sys_filters,["^bin/","^erts-.*?/","^release"]}, {excl_sys_filters,["/doc","/usr","/man","/src","/include","/lib", "/dialyzer.exe$","/escript.exe$","/werl.exe$", "/beam.debug.dll$","/beam.debug.smp.dll$", "\.pdb$"]}, {incl_app_filters,["^ebin/"]}, {excl_archive_filters,[]}, {app,kernel,[{incl_cond,include}]}, {app,stdlib,[{incl_cond,include}]}, {app,sasl,[{incl_cond,include}]}, {app,client,[{incl_cond,include}, {incl_app_filters,["^ebin/","^priv/"]}, {excl_archive_filters,["^priv$"]}]} ] }. erlang的文档中有关于reltool部署描述的详细解释,说得很清楚了。需要说明的是别看reltool文档中列出了一坨的参数,不要害怕,基本上只要使用默认值就行了,比如以上的部署描述文件只要这样写就能正常工作了: {sys,[{lib_dirs,["/home/arksea"]}, {boot_rel,"client"}, {rel,"client","0.1",[kernel,stdlib,sasl,client]}, {debug_info, keep}, {app,kernel,[{incl_cond,include}]}, {app,stdlib,[{incl_cond,include}]}, {app,sasl,[{incl_cond,include}]}, {app,client,[{incl_cond,include}]} ] }. 是不是简单了许多?只是打出来的包要大不少。 三、部署描述文件的编写 下面对一些常用的参数进行解释 1、首先是 lib_dirs,文档中说是系统依赖库的位置,实际上你也应该把项目路径的父目录填在这里,这点很重要,否则就搜索不到你的系统咯。比如这里,项目client所在的父目录是/home/arksea,可以填写相对路径比如../server 2、文件包含规则有一系列的参数,这些参数都支持正则表达式 incl_sys_filters excl_sys_filters incl_app_filters excl_app_filters incl_archive_filters excl_archive_filters 这里说说所谓“sys”、“app”、“archive”的概念
强调一点,这里的文件名都是相对路径哟,写正则表达式的时候要注意
root_dir/lib/mnesia-4.4.11/doc将被表示为 doc root_dir/lib/mnesia-4.4.11/examples/bench将被表示为 examples/bench 所以要剔除这些文件应该这样写正则表达式: {excl_app_filters, ["^doc","^examples/bench"]} 3、rel参数用于生成rel、script、boot文件,请参考systool文档。rel参数非常的简单,只要为系统起一个名字与版本号,然后列出本系统所直接依赖的app,连版本号都不要写,reltool会自动根据root_dir与lib_dirs中的erlang与各app版本生成rel文件 4、每个app可以有自己的filter参数,如果你写了它将覆盖sys层的filter参数。需要注意的一点是,app的名字必须与其文件夹的名字相同,比如这里的app名是client,则其文件夹应为lib_dirs/client . 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-21
就像你说的记录是最好的记忆,在整理资料的同时不仅记住了,还能把思路梳理清楚
|
|
返回顶楼 | |