erlang开发环境时beam 自动加载。提高开发效率
erlang开发要手动去c:l() 改动的模块。弄个自动加载的mod 提高开发效率-module('_reload_beam').
%% --------------------------------------------------------------------
%% Include files
%% --------------------------------------------------------------------
-include("comm.lib.hrl").
-include("mod.db.hrl").
-include_lib("kernel/include/file.hrl").
%% ====================================================================
%% API functions
%% ====================================================================
-export().
%% @author [email protected]
%% @用法: 每秒调用 _reload_beam:do() 一次,自动检查是否有文件更新并加载
%% 1.生产环境 每239秒检查一次
%% 2.开发环境 每秒检查一次 (默认)
do() ->
case filelib:is_file("/data/game_server/release.txt") of
?true -> %% 生产环境(条件可以自己定义)
NKEY= {?MODULE,'_reload_do_'},
NTime = util_time:seconds(),
case ets:lookup(?ETS_S_CONFIG,NKEY) of
[{_,OTime}|_] ->
?IF(NTime - OTime > 239,begin do2(), ets:insert(?ETS_S_CONFIG, {NKEY, NTime}) end, ?skip);
[] ->
ets:insert(?ETS_S_CONFIG, {NKEY, NTime});
_ ->
?skip
end;
?false -> %% 开发环境
do2()
end.
do2() ->
[case file:read_file_info(Filename) of
{ok, #file_info{mtime = Mtime}} ->
case ets:lookup(?ETS_S_CONFIG,{?MODULE,Module}) of
[{_,OTime}|_] ->
?IF(Mtime > OTime, reload(Module,Mtime), ?skip);
[] ->
ets:insert(?ETS_S_CONFIG, {{?MODULE,Module}, Mtime});
_-> ?skip
end;
{?ok, _ } -> ?skip;
{?error, enoent} -> ?skip;
{?error, Reason} ->
?MSG_ERROR("Error reading ~s's file info: ~p~n",),
?error
end || {Module, Filename} <- code:all_loaded(), is_list(Filename)].
reload(Module,Mtime)->
c:l(Module),
ets:insert(?ETS_S_CONFIG, {{?MODULE,Module},Mtime}),
?MSG_ECHO("Reloading ~p reload ok test ok!",).
试了一下,感觉还不错,改代码就不用总是编译后再手动加载了
页:
[1]