【问题标题】:Lager calls failing during Common Test test runs在 Common Test 测试运行期间较大的调用失败
【发布时间】:2014-10-21 05:22:08
【问题描述】:

我决定在我的 Erlang 项目中设置 lager。我正在使用erlang.mk,所以我添加了

ERLC_OPTS = +'{parse_transform, lager_transform}' 

到我的 Makefile。我可以运行make all 并编译模块而不会出错。我还可以启动一个erl 控制台并使用 lager 运行包含模块的应用程序。在控制台会话期间不会生成错误,并且会记录更多消息。似乎一切都很好(这是我第一次使用啤酒)。但是,当我运行 Common Test 时,较大的调用失败:

10:11:17.174 [error] CRASH REPORT Process <0.238.0> with 2 neighbours exited with reason: call to undefined function lager:info("Params: ~p", [[]]) in gen_server:init_it/6 line 328

由于看起来我正在测试的模块已经正确编译,我认为这是一个较大的模块不存在的问题。但是,如果我添加这个:

erlang:display(lager:module_info()),

在第一个贮藏啤酒调用成功后,打印贮藏啤酒的模块信息。我假设我正在进行的日志记录调用正在利用一些解析转换魔法来工作,而这在我的 Common Test 运行期间不存在。

非常感谢任何建议!

【问题讨论】:

  • 解决了!这是由于我的 Makefile 中的错误(不是 erlang.mk)。有时间我会添加答案。

标签: makefile erlang common-test lager parse-transform


【解决方案1】:

原来我的 Makefile 中有一个拼写错误,但在这个过程中我学到了很多关于 erlang.mk 的知识。 erlang.mk 正在寻找具有不同名称的变量。

我最初在我的 Makefile 中:

ERLC_OPTS = +'{parse_transform, lager_transform}'

但是 erlang.mk 在测试模块之前不使用 ERLC_OPTS 来编译模块。它总是在通用测试套件之前重新编译。为了让模块使用解析转换进行编译以进行测试,我需要这样做:

# Compile flags
ERLC_COMPILE_OPTS= +'{parse_transform, lager_transform}'

# Use the same settings for compiling releases as well as for testing
ERLC_OPTS= $(ERLC_COMPILE_OPTS)
TEST_ERLC_OPTS= $(ERLC_COMPILE_OPTS)

这可确保在测试期间使用完全相同的设置编译应用程序源代码。

【讨论】:

  • 我注意到在 Makefile 中的 'include erlang.mk' 行之前像这样设置 ERLC_OPTS 会影响 erlang.mk 本身中的 ERLC_OPTS 设置,因为它看起来像这样:ERLC_OPTS ?= ...
【解决方案2】:

这是对 Stratus3D 答案的轻微改造,不会影响 erlang.mk 的 ERLC_OPTS 和 TEST_ERLC_OPTS 值,但会增加它们:

# this must be first
include erlang.mk

# Compile flags
ERLC_COMPILE_OPTS= +'{parse_transform, lager_transform}'

# Append these settings
ERLC_OPTS += $(ERLC_COMPILE_OPTS)
TEST_ERLC_OPTS += $(ERLC_COMPILE_OPTS)

【讨论】:

    猜你喜欢
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2011-09-09
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多