使用target_system进行erlang应用的发行
2011-09-21 16:27
169 查看
一个简单实现了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
来启动这个应用。
./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
来启动这个应用。
相关文章推荐
- [转]使用target_system进行erlang应用的发行
- 使用SDK Manager.exe无法进行更新(No system images installed for this target)
- System.UnauthorizedAccessException: 拒绝访问 temp 目录。用来运行 XmlSerializer 的标识“NT AUTHORITY\NETWORK SERVICE”没有访问 temp 目录的足够权限。CodeDom 将使用进程正在使用的用户帐户进行编译,这样,如
- 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码 (实例) (轉載)
- Android应用开发中如何使用RSA加密算法对数据进行校验
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的基本操作
- 使用jni技术进行android应用签名信息核查及敏感信息保护
- 使用C#进行基于PI的开发(三)——应用PISDK和PIAPI从PI数据库读取数据
- 如何在使用摩托罗拉上的RSS阅读器应用进行一次订阅
- 使用excel进行数据挖掘(5)---- 应用场景分析
- socket上http协议应用(使用socket进行http通信的例子,准备好报头以后,简单read/write就可以了)
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇阶段总结与WinForm篇展望
- 基于ros系统下使用Android应用 Make nav进行地图加载和导航
- 通过SharedPreferences类进行应用间数据传递的简单使用场景
- 使用Android Studio + 基于Eclipse的MAT 对Android应用进行内存泄漏的分析和检测
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL
- 在Windows系统中使用C++进行Android应用开发的环境搭建
- Masonry -- 使用纯代码进行iOS应用的autolayout自适应布局
- Masonry -- 使用纯代码进行iOS应用的autolayout自适应布局
- Swift - 使用HTML5进行iOS开发(将HTML5打包成iOS应用)