erlang中構建本身的app是很是方便的,能夠本身定製app,不過這裏只是簡單記錄下erlang下典型的作法。
便是構建otp application。。
構建定製一個application能夠經過xxx.app文件,能夠把app文件放到config文件夾裏面
eg:config/gs.app
首先來看下app文件:
app 文件全稱爲 application resource fileshell
用來指定application的用途&&如何啓動。。。windows
- {application,"app名字",
- [
- {description,"app描述"},
- {vsn ,"版本號"},
- {id ,Id},%%app id 同 erl -id ID
- {modules,[Modules]},%%app包含的模塊,systools模塊使用它來生成script、tar文件
- {maxP,Num},%%進程最大值
- {maxT,Time},%%app運行時間 單位毫秒
- {registered,[mod]},%%指定app 名字模塊,systools用來解決名字衝突
- {included_applictions ,[XX]},%%指定子 app,只加載,可是不啓動
- {applictions,[xxxx]},%%啓動本身的app前,將會首先啓動此列表的app
- {env,[xxxx]},%%配置app的env,能夠使用application:get_env獲取
- {mod,{xxx,args}},%%指定app啓動模塊,參數,對應本身app的application behavior
- {start_phases,[{xxx,xxx}]]%%指定啓動階段一些操做,對應otp application start_phase函數
- ]
- }
根據本身的須要定製app文件,這裏個人app文件爲:cookie
- {
- application, gs,
- [
- {description, "just gs."},
- {vsn, "1.0a"},
- {modules, [gs_app,gs_sup]},
- {registered, [gs_sup]},
- {mod, {gs_app, []}},
- {applictions,[kernel,stdlib,sasl]},
- {env,[{author,"jj"}]},
- {start_phases, []}
- ]
- }.
ok,接下來定製otp application:
而且把代碼文件放到src下面app
- %%src/gs_app.erl
- -module(gs_app).
- -behaviour(application).
- -export([start/2,start/0, stop/1]).
-
- start() ->
- application:start(gs).
-
- start(_, []) ->
- io:format("gs start.... ~n"),
- {ok, Pid} = gs_sup:start_link(),
- io:format("gs Main Pid is ~p ~n",[Pid]),
- {ok, Pid}.
-
- stop(_State) ->
- io:format("gs stop..... ~n").
其中這裏的gs_sup是在app registered模塊,典型otp中的supervisor,固然也能夠本身隨便實現一個模塊。。。函數
- %%src/gs_sup.erl
- -module(gs_sup).
- -behaviour(supervisor).
- -export([start_link/0,init/1]).
-
- start_link() ->
- supervisor:start_link({local,?MODULE}, ?MODULE, []).
-
-
- init([]) ->
- {ok, {
- {one_for_one, 3, 10},
- []
- }}.
爲此,還能夠簡單寫個Emakefile,來實現erl -make,而且把beam文件
輸出到ebin文件夾spa
- { ["src/*"]
- , [
- {outdir, "./ebin"}
- ]
- }.
ok,基本上了,爲了管理須要,能夠簡單寫一個script文件來啓動app,在windows下面
能夠這樣作:.net
- start.bat
- cd config/
- erl -pa ../ebin/ -name jj@test -setcookie abc -boot start_sasl -s gs_app start
-
- cmd
最後執行bat文件。。。
app運行了,能夠經過application:loaded_applications()。orm
- gs start....
- gs Main Pid is <0.48.0>
-
- =PROGRESS REPORT==== 28-Dec-2012::15:51:46 ===
- application: gs
- started_at: jj@test
- Eshell V5.9 (abort with ^G)
- (jj@test)1>
-
- Eshell V5.9 (abort with ^G)
- (jj@test)1> application:loaded_applications().
- [{kernel,"ERTS CXC 138 10","2.15"},
- {sasl,"SASL CXC 138 11","2.2"},
- {gs,"just gs.","1.0a"},
- {stdlib,"ERTS CXC 138 10","1.18"}]
- (jj@test)2>
就這樣,簡單app完成了。。。。
固然,這只是一個很是很是簡單的app。只實現了parent supervisor。blog