.erlang 用来在erlang shell启动时候预加载模块
user_default 可以用来加载record模块的定义
问题:最近项目中添加 .erlang 和 user_default 后,发现部署到线上环境时候,user_default 没有生效。
原因:翻开shell源码,可以看到,shell是通过一个ets来存储record信息的,如何获得record信息呢,要么是读取beam(debug_info)中的源码,要么是通过源文件获得。
解决办法:线上的代码都是没有加debug_info编译选项的,所以就没有生效。
1. 尝试通过在user_default模块中添加 -compile(debug_info)来生成编译这单个模块,结果发现没起作用,应该是erlang的bug。
2. 最后通过只能在Make中添加新的rule来解决问题。类似于
erlc +debug_info user_default.erl
Shell源码片段
网友评论