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

使用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应用程序...

    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_ale, Erlang嵌入式框架嵌入式框架的Erlang Actor库.zip

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

    erlang_otp_win64_25.0

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

    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_B_model.rar_Erlang B _Erlang B model_Wireless Handbook_e

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

    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_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]; % ...

    Erlang及其应用Erlang及其应用

    由Ericsson开发的Erlang在大型电信系统中有广泛应用。它最初设计的目标就是解决分布式、高可靠性和软实时性的问题。 1. **并发与消息传递**:Erlang的核心特性之一是并发和消息传递。在Erlang中,应用程序通常由数...

    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