erlang具有动态加载代码的能力。在开发过程中一般都让代码自动编译加载,这样开发起来很爽。
最有名项目应该是sync了地址:https://github.com/rustyio/sync
最近在用rebar3 构建项目。而且又用到了erlydtl,在用sync自动编译dtl的时候出现了问题。
erlydtl 的编译配置是这样的。
{erlydtl_opts, [
{doc_root, "priv/templates"},
{outdir, "ebin"},
{compiler_options, [report, return, debug_info]},
{source_ext, ".dtl"},
{module_ext, "_view"}
]}
但是sync编译出来文件结尾老是 _dtl.beam 而不是配置 {module_ext, “_view”} 应该产生的_view.beam,而且生成的beam的位置也不对。
只好翻源码,发现sync并不支持erlydtl_opts的配置,*_dtl.beam 命名是写死的。。sync动态编译dtl的这条路看来是走不通了。
然后翻rebar3 插件。发现了rebar3_auto 插件。简单建了个工程做实验没问题。但是当我在项目中天剑cowboy的后。rebar3_auto 只编译第一次。然后就失灵了。(而且inotify_wait 进程已经不再了。。 ),google后发早就有人爆出这个问题了https://github.com/tsloughter…,看来rebar3_auto 现在还没法用。
接着找到active,但是太小众了,主要支持的mad。对rebar也就是兼容。试了一下没成功也不想深入研究它。
到这的结果就是用rebar3 我还没找到一个好的reload的工具。。。苦逼啊