4.5.6. rebar常见问题¶
rebar转rebar3时erldydtl不编译问题:
说明: 此事发重现象很诡异
我在测试时,一直都没有问题,但9.29上线pvt发现网站打不开
好像其他部门反应系统也出现了问题,于是急急停了
当我在测试机重复上线的步骤时也出现了同样的问题
很是奇怪,测试时一直没有发现
于是,转而处理erlydtl的问题,于是发现rebar设置的hook不可用了
{provider_hooks, [ %% hook钩子
{post, [{compile, {erlydtl, compile}}]}
]}.
手工执行rebar3 erlydtl compile后好了,但使用
{% extends "base.dtl" %}时
在base.dtl文件里的
{% load erlydtl_custom_tags %}
{% rendMenuPage user %}
没有执行
奇怪的是:
新建的项目用同样的rebar.config就没有问题
进展:
1.我在另一机器上重新clone项目时,编译运行就没有问题
2.我在同一机器上重新clone项目时,编译运行也没有问题
于是我找2边的不同,从rebar转到rebar3有多几个文件
1.deps/
2.ebin/
当我把此2目录移走再运行,就好了
原因:
1.erlydtl在编译时如果有此beam文件就不再编译
2.erlydtl默认增加当前目录的ebin目录
修改deps项目中的文件不编译:
直接修改_build/default/lib目录中项目的源文件
在顶层make,默认不编译
rebar3就是这样,我认为也是合理的
解决办法:
1.1 删除对应的beam文件,重新编译
1.2 走一遍升级流程
deps项目lager_transform没有执行:
原因:
需要在用lager的deps项目中增加rebar.config文件
并加上:
{erl_opts, [
{parse_transform, lager_transform}
]}.