zoukankan      html  css  js  c++  java
  • [转]使用target_system进行erlang应用的发行

    转自:http://blogold.chinaunix.net/u3/104903/showart_2348532.html

    一个简单实现了OTP的Server:echoline,一个Helloworld级别的OTP应用,目录结构如下:

    1. ./src/echoline_app.erl
    2. ./src/echoline_sup.erl
    3. ./src/echoline_server.erl
    4. ./src/tcp_server.erl
    5. ./ebin/echoline_app.app
    6. ./priv/
    7. ./include/
    8. ./echoline_rel.rel
    9. ./Emakefile
    这是一个普通的Erlang应用,可以直接使用 erl -make 来编译, Emakefile 内容如下:
    1. {'src/*', [debug_info,{i,'include'},{outdir,'ebin'}]}.
    echoline_app.app 内容如下:
    1. {application, echoline_app,   
    2.   [{description, "Echoline Server"}, 
    3.    {vsn, "1"}, 
    4.    {modules, [echoline_app, echoline_sup, echoline_server, tcp_server]}, 
    5.    {registered, []}, 
    6.    {applications, [kernel, stdlib, sasl]}, 
    7.    {mod, {echoline_app,[]}} 
    8.   ]}.

    但是这个应用仅仅只能在安装了Erlang的环境下启动。这时候可以这样:

    1. erl -pa ./ebin
    2. 1> application:load(echoline).
    3. ok
    来加载这个应用。接下来,可以生成一个Release,它需要echoline_rel.rel这个文件,内容为:
    1. {release, 
    2.   {"echoline_rel", "1"}, 
    3.   {erts, "5.5.4"}, 
    4.   [{kernel, "2.11.4"}, 
    5.    {stdlib, "1.14.4"}, 
    6.    {sasl, "2.1.5"}, 
    7.    {echoline_app, "1"}] 
    8. }.

    注意,上面的模块版本以实际为主,我用的是R11B-4。而且{echoline, “1″}这句的 版本号,app名称 要跟echoline.app一致。

    接着运行这两步就可以生成能够用于分发的release:

    1. 2> systools:make_script("echoline_rel", [local]).
    2. ok
    3. 3> systools:make_tar("echoline_rel").
    4. ok

    程序会在根目录下面生成

    1. echoline_rel.boot
    2. echoline_rel.script
    3. echoline_rel.tar.gz

    三个文件。这个tar.gz可以直接用于部署到其他机器上面。同时,还能够以

    1. erl -boot echoline_rel

    这种方式启动应用。

    但是这样还不够彻底,在没有Erlang的机器上面,最起码还得安装上一个CEAN才能启动这个应用,好在文档的《System Principles》中提供了一个target_system,使得生成应用的发行版本成为可能。

    按照文档创建一个target_system.erl,windows下需要将:

    1. copy_file(filename:join([ErtsBinDir, "epmd"]),   
    2.            filename:join([TmpBinDir, "epmd"]), [preserve]), 
    3. copy_file(filename:join([ErtsBinDir, "run_erl"]),   
    4.            filename:join([TmpBinDir, "run_erl"]), [preserve]), 
    5. copy_file(filename:join([ErtsBinDir, "to_erl"]),   
    6.            filename:join([TmpBinDir, "to_erl"]), [preserve]),

    改为

    1. copy_file(filename:join([ErtsBinDir, "epmd.exe"]),   
    2.            filename:join([TmpBinDir, "epmd.exe"]), [preserve]), 
    3. copy_file(filename:join([ErtsBinDir, "start_erl.exe"]),   
    4.            filename:join([TmpBinDir, "start_erl.exe"]), [preserve]), 
    5. copy_file(filename:join([ErtsBinDir, "werl.exe"]),   
    6.            filename:join([TmpBinDir, "werl.exe"]), [preserve]),

    因为windows下的启动程序跟linux下有所不同。

    然后运行:

    1. erl -pa ./ebin/
    1. Eshell V5.5.4 (abort with ^G)
    2. 1> target_system:create("echoline_rel").
    3. Reading file: "echoline_rel.rel" ...
    4. Creating file: "plain.rel" from "echoline_rel.rel" ...
    5. Making "plain.script" and "plain.boot" files ...
    6. Making "echoline_rel.script" and "echoline_rel.boot" files ...
    7. Creating tar file "echoline_rel.tar.gz" ...
    8. Creating directory "tmp" ...
    9. Extracting "echoline_rel.tar.gz" into directory "tmp" ...
    10. Deleting "erl" and "start" in directory "tmp/erts-5.5.4/bin" ...
    11. Creating temporary directory "tmp/bin" ...
    12. Copying file "plain.boot" to "tmp/bin/start.boot" ...
    13. Copying files "epmd", "run_erl" and "to_erl" from
    14. "tmp/erts-5.5.4/bin" to "tmp/bin" ...
    15. Creating "tmp/releases/start_erl.data" ...
    16. Recreating tar file "echoline_rel.tar.gz" from contents in directory "tmp" ...
    17. Removing directory "tmp" ...
    18. ok

    它在根目录下生成了这些文件:

    1. echoline_rel.boot
    2. echoline_rel.script
    3. echoline_rel.tar.gz
    4. plain.boot
    5. plain.rel
    6. plain.script

    将 echoline_rel.tar.gz 解压到某个目录下,比如 C:\echoline,就可以用

    1. C:\echoline>erts-5.5.4\bin\erl.exe -boot .\releases\1\start

    来启动这个应用。

  • 相关阅读:
    RedisUtil
    CSS基础知识点笔记
    fdgfgfgfgf
    PerfMon Metrics Collector插件的Disks I/O使用总结
    Jmeter使用笔记之html报告扩展(一)
    Jmeter使用笔记之意料之外的
    Jmeter使用笔记之函数
    Jmeter使用笔记之组件的作用域
    css 初始化文件 全面
    vue-grid-layout 使用以及各项参数作用
  • 原文地址:https://www.cnblogs.com/samis/p/2061239.html
Copyright © 2011-2022 走看看