2014-08-27 156 views
4

我決定在我的Erlang項目中安裝lager。我使用erlang.mk,所以我添加了在通用測試測試運行期間Lager調用失敗

ERLC_OPTS = +'{parse_transform, lager_transform}' 

到我的Makefile。我可以運行make all並編譯模塊沒有錯誤。我也可以啓動一個erl控制檯並使用lager運行包含模塊的應用程序。在控制檯會話期間,不會生成錯誤並記錄日誌消息。似乎一切都很好(這是我第一次使用啤酒)。但是,當我運行常用的測試中,啤酒調用失敗:

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()), 

第一啤酒上面稱之爲成功,爲印刷啤酒模塊信息。我假設我正在做的日誌記錄調用正在使用一些解析變換魔術以便工作,而這在我的通用測試運行期間不存在。

任何建議,非常感謝!

+0

解決了!這是由於我的Makefile(不是erlang.mk)中的錯誤。當我得到片刻時,我會添加一個答案。 – Stratus3D 2014-08-27 19:09:38

回答

3

原來我在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) 

這可以確保應用程序的源代碼在測試過程中使用完全相同的設置編譯。

+1

我注意到,在'include erlang.mk'這一行之前,在Makefile中像這樣設置ERLC_OPTS會影響erlang.mk本身的ERLC_OPTS設置,因爲它看起來像這樣:ERLC_OPTS?= ... – postfuturist 2014-10-22 20:28:14

3

這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) 
相關問題