生活随笔
收集整理的這篇文章主要介紹了
[转]使用target_system进行erlang应用的发行
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
[轉(zhuǎn)]使用target_system進(jìn)行erlang應(yīng)用的發(fā)行
轉(zhuǎn)自:http://blogold.chinaunix.net/u3/104903/showart_2348532.html
一個(gè)簡(jiǎn)單實(shí)現(xiàn)了OTP的Server:echoline,一個(gè)Helloworld級(jí)別的OTP應(yīng)用,目錄結(jié)構(gòu)如下:
./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這是一個(gè)普通的Erlang應(yīng)用,可以直接使用 erl -make 來編譯, Emakefile 內(nèi)容如下:
{'src/*', [debug_info,{i,'include'},{outdir,'ebin'}]}.echoline_app.app 內(nèi)容如下:
{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,[]}}? ? ]}.但是這個(gè)應(yīng)用僅僅只能在安裝了Erlang的環(huán)境下啟動(dòng)。這時(shí)候可以這樣:
erl -pa ./ebin 1> application:load(echoline). ok來加載這個(gè)應(yīng)用。接下來,可以生成一個(gè)Release,它需要echoline_rel.rel這個(gè)文件,內(nèi)容為:
{release,? ? {"echoline_rel", "1"},? ? {erts, "5.5.4"},? ? [{kernel, "2.11.4"},? ?? {stdlib, "1.14.4"},? ?? {sasl, "2.1.5"},? ?? {echoline_app, "1"}]? }.注意,上面的模塊版本以實(shí)際為主,我用的是R11B-4。而且{echoline, “1″}這句的 版本號(hào),app名稱 要跟echoline.app一致。
接著運(yùn)行這兩步就可以生成能夠用于分發(fā)的release:
2> systools:make_script("echoline_rel", [local]). ok 3> systools:make_tar("echoline_rel"). ok程序會(huì)在根目錄下面生成
echoline_rel.boot echoline_rel.script echoline_rel.tar.gz三個(gè)文件。這個(gè)tar.gz可以直接用于部署到其他機(jī)器上面。同時(shí),還能夠以
erl -boot echoline_rel這種方式啟動(dòng)應(yīng)用。
但是這樣還不夠徹底,在沒有Erlang的機(jī)器上面,最起碼還得安裝上一個(gè)CEAN才能啟動(dòng)這個(gè)應(yīng)用,好在文檔的《System Principles》中提供了一個(gè)target_system,使得生成應(yīng)用的發(fā)行版本成為可能。
按照文檔創(chuàng)建一個(gè)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]),因?yàn)閣indows下的啟動(dòng)程序跟linux下有所不同。
然后運(yùn)行:
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 解壓到某個(gè)目錄下,比如 C:\echoline,就可以用
C:\echoline>erts-5.5.4\bin\erl.exe -boot .\releases\1\start來啟動(dòng)這個(gè)應(yīng)用。
posted on
2011-05-28 22:13 我的藍(lán)海 閱讀(
...) 評(píng)論() 編輯 收藏
轉(zhuǎn)載于:https://www.cnblogs.com/samis/archive/2011/05/28/2061239.html
總結(jié)
以上是生活随笔為你收集整理的[转]使用target_system进行erlang应用的发行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。