`
AvinDev
  • 浏览: 113039 次
社区版块
存档分类
最新评论

使用target_system进行erlang应用的发行

阅读更多
好久之前捣鼓过的东西,怕忘记了,记录一下。

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

./src/echoline_app.erl
./src/echoline_sup.erl
./src/echoline_server.erl
./src/tcp_server.erl
./ebin/echoline_app.app
./priv/
./include/
./echoline_rel.rel
./Emakefile

这是一个普通的Erlang应用,可以直接使用 erl -make 来编译, Emakefile 内容如下:
{'src/*', [debug_info,{i,'include'},{outdir,'ebin'}]}.


echoline_app.app 内容如下:
{application, echoline_app, 
 [{description, "Echoline Server"},
  {vsn, "1"},
  {modules, [echoline_app, echoline_sup, echoline_server, tcp_server]},
  {registered, []},
  {applications, [kernel, stdlib, sasl]},
  {mod, {echoline_app,[]}}
 ]}.


但是这个应用仅仅只能在安装了Erlang的环境下启动。这时候可以这样:
引用
erl -pa ./ebin
1> application:load(echoline).
ok

来加载这个应用。

接下来,可以生成一个Release,它需要echoline_rel.rel这个文件,内容为:
{release,
 {"echoline_rel", "1"},
 {erts, "5.5.4"},
 [{kernel, "2.11.4"},
  {stdlib, "1.14.4"},
  {sasl, "2.1.5"},
  {echoline_app, "1"}]
}.

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

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

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


程序会在根目录下面生成
echoline_rel.boot
echoline_rel.script
echoline_rel.tar.gz
三个文件。这个tar.gz可以直接用于部署到其他机器上面。
同时,还能够以
引用
erl -boot echoline_rel

这种方式启动应用。

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

按照文档创建一个target_system.erl,windows下需要将:
    copy_file(filename:join([ErtsBinDir, "epmd"]), 
              filename:join([TmpBinDir, "epmd"]), [preserve]),
    copy_file(filename:join([ErtsBinDir, "run_erl"]), 
              filename:join([TmpBinDir, "run_erl"]), [preserve]),
    copy_file(filename:join([ErtsBinDir, "to_erl"]), 
              filename:join([TmpBinDir, "to_erl"]), [preserve]),

改为
    copy_file(filename:join([ErtsBinDir, "epmd.exe"]), 
              filename:join([TmpBinDir, "epmd.exe"]), [preserve]),
    copy_file(filename:join([ErtsBinDir, "start_erl.exe"]), 
              filename:join([TmpBinDir, "start_erl.exe"]), [preserve]),
    copy_file(filename:join([ErtsBinDir, "werl.exe"]), 
              filename:join([TmpBinDir, "werl.exe"]), [preserve]),

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

编译,然后运行:

引用
erl -pa ./ebin/


引用
Eshell V5.5.4  (abort with ^G)
1> target_system:create("echoline_rel").
Reading file: "echoline_rel.rel" ...
Creating file: "plain.rel" from "echoline_rel.rel" ...
Making "plain.script" and "plain.boot" files ...
Making "echoline_rel.script" and "echoline_rel.boot" files ...
Creating tar file "echoline_rel.tar.gz" ...
Creating directory "tmp" ...
Extracting "echoline_rel.tar.gz" into directory "tmp" ...
Deleting "erl" and "start" in directory "tmp/erts-5.5.4/bin" ...
Creating temporary directory "tmp/bin" ...
Copying file "plain.boot" to "tmp/bin/start.boot" ...
Copying files "epmd", "run_erl" and "to_erl" from
"tmp/erts-5.5.4/bin" to "tmp/bin" ...
Creating "tmp/releases/start_erl.data" ...
Recreating tar file "echoline_rel.tar.gz" from contents in directory "tmp" ...
Removing directory "tmp" ...
ok


它在根目录下生成了这些文件:
echoline_rel.boot
echoline_rel.script
echoline_rel.tar.gz
plain.boot
plain.rel
plain.script

将 echoline_rel.tar.gz 解压到某个目录下,比如 C:\echoline,就可以用
C:\echoline>erts-5.5.4\bin\erl.exe -boot .\releases\1\start
来启动这个应用。

p.s,target_system在windows下还有一些问题,比如不能用target_system:install来安装应用。
分享到:
评论
1 楼 gqf2008 2008-12-03  
受教了,谢谢

相关推荐

    xiandiao_erlang_Erlang课后习题_

    Erlang是一种并发式、函数式的编程语言,由瑞典电信设备制造商Ericsson开发,最初用于构建高可用性、容错性和可扩展性的分布式系统。"xiandiao_erlang_Erlang课后习题_"这个压缩包文件包含了Erlang程序设计第二版的...

    Erlang-Formula.zip_Erlang B _Erlang-B_erlang_erlang B计算_erlang C

    Erlang B 和 Erlang C 是在电信领域中广泛使用的两个数学公式,用于预测和管理电话交换系统的呼叫处理能力。这两个公式由丹麦工程师 Agner Krarup Erlang 在20世纪初开发,对于理解通信系统中的呼叫占用率、阻塞率和...

    otp_win64_20.3-Erlang.zip

    安装完成后,你可以使用Erlang的REPL(Read-Eval-Print Loop)进行交互式编程,或者构建和运行Erlang项目。此外,Erlang OTP还包括了各种实用工具,如编译器、调试器和性能监视工具,以支持开发和维护Erlang应用程序...

    erlang_otp_win64_25.0

    2. **OTP**:Open Telecom Platform,开放电信平台,是一套库、设计原则和开发工具的集合,旨在简化使用Erlang开发大型、高可用性的分布式系统的过程。它包括了进程管理、错误恢复、分布式计算、监控工具等核心组件...

    HW2.rar_erlang_erlang C

    标题中的“HW2.rar_erlang_erlang C”可能是指一个关于Erlang C模型的作业或项目,存储在名为“HW2”的RAR压缩文件中。Erlang C是一种用于预测电话交换系统中呼叫中心拥塞的数学模型,由通信工程师Agner Krarup ...

    erl_nif 扩展erlang的另外一种方法

    Erlang是一种面向并发的、函数式编程语言,被广泛应用于分布式系统和高可用性服务。在Erlang中,为了实现与C或其他低级语言的高效交互,Erlang提供了一个名为`erl_nif`的接口。本文将深入探讨`erl_nif`,了解它是...

    megaco_session-0.5.rar_erlang_erlang Megaco_megaco

    Erlang是一种功能强大的并行、分布式和容错的编程语言,特别适合于构建高可用性和实时性系统,如电信领域中的应用。 “erlang_erlang_megaco”标签进一步强调了这个项目与Erlang语言以及Megaco协议的关联。Megaco...

    erlang_gproc_扩展实现Erlang的全局ets

    Erlang是一种面向并发的、函数式编程语言,被广泛应用于分布式系统和高可用性服务。在Erlang中,ETS(Erlang Term Storage)是内置的一种高效、内存中的数据库,用于存储和检索Erlang术语。然而,ETS的一个限制是它...

    Erlang_B_model.rar_Erlang B _Erlang B model_Wireless Handbook_e

    **查表方法**在实际应用中,由于Erlang B公式涉及高阶阶乘计算,计算复杂度较高,通常会使用预先计算好的表格来查找结果。无线通信手册中的Erlang B查表通常会列出不同C/N比下的B值,使得工程师可以根据已知的话务量...

    erlang_ale, Erlang嵌入式框架嵌入式框架的Erlang Actor库.zip

    erlang_ale, Erlang嵌入式框架嵌入式框架的Erlang Actor库 用于嵌入式的/ale Erlang erlang/jar提供了高级抽象,用于嵌入式平台上通过 I2C 。SPI和kdb与硬件外设接口。正在启动erlang/ale同时支持rebar3和 erlang.mk...

    why_i_choose_Erlang

    - **持续服务**:Erlang支持长时间运行的应用程序,能够在不停机的情况下进行升级和维护。 - **热升级**:允许开发者在不中断服务的前提下更新代码,这对于需要24/7运行的服务非常关键。 - **可靠性**:Erlang具备...

    building_web_applications_with_erlang.pdf

    根据给出的文件信息,我们可以...以上所述内容提供了对Erlang在Web应用开发中角色的深刻理解,特别是使用Yaws Web服务器的相关知识和实践。这些知识对于想要深入学习Erlang在Web开发中应用的开发者来说是非常重要的。

    for_each_file 用erlang代码实现遍历文件

    下面我们将深入探讨如何使用Erlang实现这个功能,以及涉及的相关知识点。 首先,让我们看看`for_each_file.erl`可能的实现。在这个模块中,我们可能会定义一个名为`for_each_file/2`的函数,它接受两个参数:一个是...

    erlang_release_example:ErlangOTP版本处理示例

    cp _build/default/rel/erlang_release_example/erlang_release_example-0.1.0.tar.gz deploy/ (cd deploy && tar xzf erlang_release_example-0.1.0.tar.gz) ./deploy/bin/erlang_release_example console (erlang_...

    erlang-22.3-1.el7.x86_64.rpm

    **RabbitMQ**是一种广泛应用的消息队列(Message Broker),它使用Erlang作为其主要实现语言。Erlang的并发特性和分布式能力使得它成为构建高可靠性和可扩展性消息传递平台的理想选择。 **RabbitMQ与Erlang的结合**...

    erlang_otp_win64_20.3.zip

    是erlang_otp_20.3 的win64安装包,内为exe文件,...使用前需要配置环境变量:1.变量名为ERLANG_HOME,变量值为安装Erlang的路径(路径中不要包含bin目录) 2.将新建的系统变量添加在Path中:格式为%ERLANG_HOME%\bin

    getting_started_erlang-5.4.pdf

    每个 Erlang 应用程序都是由许多轻量级进程组成的,这些进程之间通过消息传递进行通信。 ##### 4.2 消息传递 - **消息传递** 是 Erlang 进程间通信的主要机制。进程可以通过发送消息来相互协作,这种通信方式是...

    erlangforMutiplechannel.rar_erlang_matlab erlang

    例如,我们可以输入不同的呼叫到达率和通道数,然后使用内置的统计函数或自定义函数来应用Erlang B 或 C 公式。 以下是一个简单的 MATLAB 示例代码,用于计算Erlang B值: ```matlab lambda = [0.5, 1, 1.5]; % ...

    esl-erlang_23.0_windows_amd64.exe rabbitmq-server-3.8.4.exe

    esl-erlang_23.0和rabbitmq-3.8.4windows版本 直接下载安装就行,可以直接下载就可安装,非常的方便 ,欢迎大家下载 注意事项: 1. Erlang版本和RabbitMQ版本要配套 (Erlang23.0, RabbitMQ3.8.4) 2. amd芯片请乖乖...

Global site tag (gtag.js) - Google Analytics