[转]使用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

来启动这个应用。

posted on 2011-05-28 22:13 我的蓝海 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/samis/archive/2011/05/28/2061239.html

[转]使用target_system进行erlang应用的发行相关推荐

  1. 在 Ubuntu 上安装最新版本的 Erlang方法介绍

    Erlang 是一种用于构建大规模可扩展实时系统的函数式编程语言.Erlang 最初是由 爱立信 创建的专有软件,后来被开源. Erlang 在 Ubuntu 的 Universe 仓库 中可用.启用 ...

  2. erlang 架构原理_Erlang与Java内存架构

    erlang 架构原理 我读了一篇关于Erlang VM的内存管理策略的非常非常有趣的文章. 它是Jesper Wilhelmsson撰写的论文 ,我认为讨论Erlang的内存设置和Oracle的Ja ...

  3. Erlang与Java内存架构

    我读了一篇关于Erlang VM的内存管理策略的非常非常有趣的文章. 它是Jesper Wilhelmsson撰写的论文 ,我认为讨论Erlang的内存设置和Oracle的Java VM之间的差异可能 ...

  4. Erlang 二十年,如何在编程语言中占据一席之地?

    1998 年开源发布的 Erlang 项目,在全球范围内只是个小众编程语言. 根据 TIOBE 最新发布的语言排行榜,Erlang 仅排名在第 65 位,市场份额占有小于 0.1%.但是作为一门函数编 ...

  5. Erlang开源20周年:这门编程语言见证了互联网的技术成长

    Erlang于1998年12月8日星期二以开源的形式发布.你还记得那个星期你在哪里吗?我在达拉斯(德克萨斯州):我多次访问爱立信美国分公司,帮助他们建立了一个从事AXD301交换机研发的Erlang团 ...

  6. linux erlang版本,技术|如何在 Ubuntu Linux 上安装最新的 Erlang

    Erlang 是一种用于构建大规模可扩展实时系统的函数式编程语言.Erlang 最初是由 爱立信 创建的专有软件,后来被开源. Erlang 在 Ubuntu 的 Universe 仓库 中可用.启用 ...

  7. Erlang 下载安装

    Erlang 下载安装 下载Erlang 现在进入 erlang官网 , 点击页面顶部的 DOWNLOADS,选择指定发行版,然后根据操作系统下载不同的包. 如果是Linux就选择Download S ...

  8. Cowboy 用户指南 (二) - Erlang and the Web

    Erlang 和 Web Erlang是编写Web应用程序的理想平台.它的特性完全符合现代Web应用程序的需求. Web是并发的 当你只访问一个网站时是几乎没有并发性的.打开几个连接,并通过这些连接发 ...

  9. CentOS 7.7安装Erlang和Elixir

    安装之前,先看一下它们的简要说明 Erlang Erlang是一种开源编程语言,用于构建对高可用性有要求的大规模可扩展的软实时系统.它通常用于电信,银行,电子商务,计算机电话和即时消息中.Erlang ...

最新文章

  1. 图像质量评价,图片放大和缩小
  2. Microbiome:宏基因组分箱流程MetaWRAP分析实战和结果解读
  3. mongodb分享(二)
  4. 数据包编辑工具bittwiste
  5. Kubernetes使用Jenkins服务器存储所有的kube.config文件
  6. 通过SQL Server操作MySQL的步骤和方法
  7. Idea报错,但是项目可以正常启动运行
  8. C++手动开启O2优化(以及-O -O1 -O2 -O3优化的知识点)(竞赛可用)
  9. UI登录表单使用模板素材
  10. ROS学习笔记12(用Python写一个简单的消息发布和消息订阅)
  11. 幻灯片插入smartArt
  12. java计算机毕业设计宠物店管理系统源码+数据库+系统+lw文档+部署
  13. 数据库实验四 视图实验
  14. 佳能尼康宾得等,说说查看各大单反品牌的快门次数方法
  15. JAVA实现百度网盘文件上传
  16. Excel2016制作动态图表
  17. 计算机某浏览器设置主页地址,如何查看电脑中的浏览器主页是被什么软件修改的...
  18. DOS命令:bcdedit
  19. html中将scss转编译为css,SASS把scss转化为css的四种转化方式与命令
  20. Flask开发微电影网站(八)

热门文章

  1. 安装 | Windows 10下基于Anaconda平台的TensorFlow详细安装步骤
  2. 回调函数案列(C高级)
  3. SQLite学习手册(实例代码二)
  4. AI理论知识整理(7)-单高斯模型
  5. Kaggle知识点:数据分析EDA
  6. 深度学习笔记 第四门课 卷积神经网络 第二周 深度卷积网络:实例探究
  7. 面向机器学习的特征工程翻译版
  8. 推荐系统炼丹笔记:RecSys2020-SSE-PT解锁序列数据挖掘新姿势
  9. SpringMVC重定向传参
  10. 也说说TIME_WAIT状态