Erlang中文论坛
标题:
erlang开发环境时beam 自动加载。提高开发效率
[打印本页]
作者:
dreamxyp
时间:
2017-8-17 16:37
标题:
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([do/0]).
%% @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",[Filename, Reason]),
?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[code] test ok!",[Module]).
复制代码
作者:
茶叶feng
时间:
2018-9-3 16:00
试了一下,感觉还不错,改代码就不用总是编译后再手动加载了
欢迎光临 Erlang中文论坛 (https://bbs.erldoc.com/)
Powered by Discuz! X3.3