设为首页收藏本站

Erlang中文论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 25560|回复: 1

erlang开发环境时beam 自动加载。提高开发效率

[复制链接]
发表于 2017-8-17 16:37:29 | 显示全部楼层 |阅读模式
erlang开发  要手动去c:l() 改动的模块。  弄个自动加载的mod 提高开发效率
  1. -module('_reload_beam').

  2. %% --------------------------------------------------------------------
  3. %% Include files
  4. %% --------------------------------------------------------------------
  5. -include("comm.lib.hrl").
  6. -include("mod.db.hrl").
  7. -include_lib("kernel/include/file.hrl").

  8. %% ====================================================================
  9. %% API functions
  10. %% ====================================================================
  11. -export([do/0]).
  12.         
  13. %% @author [email protected]
  14. %% @用法:   每秒调用 _reload_beam:do() 一次,自动检查是否有文件更新并加载
  15. %%            1.生产环境 每239秒检查一次
  16. %%            2.开发环境 每秒检查一次 (默认)
  17. do() ->
  18.         case filelib:is_file("/data/game_server/release.txt") of
  19.                 ?true -> %% 生产环境(条件可以自己定义)
  20.                         NKEY  = {?MODULE,'_reload_do_'},
  21.                         NTime = util_time:seconds(),
  22.                         case ets:lookup(?ETS_S_CONFIG,NKEY) of
  23.                                 [{_,OTime}|_] ->
  24.                                         ?IF(NTime - OTime > 239,  begin do2(), ets:insert(?ETS_S_CONFIG, {NKEY, NTime}) end, ?skip);
  25.                                 []            ->
  26.                                         ets:insert(?ETS_S_CONFIG, {NKEY, NTime});
  27.                                 _             ->
  28.                                         ?skip
  29.                         end;
  30.                 ?false -> %% 开发环境
  31.                         do2()
  32.         end.
  33.                                                                
  34. do2() ->
  35.     [case file:read_file_info(Filename) of
  36.          {ok, #file_info{mtime = Mtime}} ->
  37.                          case ets:lookup(?ETS_S_CONFIG,{?MODULE,Module}) of
  38.                                  [{_,OTime}|_] ->
  39.                                          ?IF(Mtime > OTime,        reload(Module,Mtime), ?skip);
  40.                                  [] ->
  41.                                          ets:insert(?ETS_S_CONFIG, {{?MODULE,Module},     Mtime});
  42.                                  _  -> ?skip
  43.                          end;
  44.          {?ok, _ }        -> ?skip;
  45.          {?error, enoent} -> ?skip;
  46.          {?error, Reason} ->
  47.              ?MSG_ERROR("Error reading ~s's file info: ~p~n",[Filename, Reason]),
  48.              ?error
  49.      end || {Module, Filename} <- code:all_loaded(), is_list(Filename)].

  50. reload(Module,Mtime)->
  51.         c:l(Module),
  52.         ets:insert(?ETS_S_CONFIG, {{?MODULE,Module},Mtime}),
  53.         ?MSG_ECHO("Reloading ~p reload ok[code] test ok!",[Module]).
复制代码


回复

使用道具 举报

发表于 2018-9-3 16:00:50 | 显示全部楼层
试了一下,感觉还不错,改代码就不用总是编译后再手动加载了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Erldoc.com  

GMT+8, 2024-3-29 15:01 , Processed in 0.491514 second(s), 9 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表