2014-01-17 28 views
3

我在嘗試在Windows 7(64位)上使用MinGW/MSYS構建Erlang RabbitMQ插件時遇到了上述錯誤。我使用Erlang v5.10.3(32位)。我能夠在我的系統上運行RabbitMQ。Erlang腳本:異常錯誤:右側值不匹配{error,enoent}

[email protected] /d/RabbitMQ/build-source/rabbitmq-public-umbrella/presence-exchange-master 
$ make 
[elided] generate deps 
escript: exception error: no match of right hand side value {error,enoent} 
    in function generate_deps__escript__1389__793192__493000:detect_deps/5 (d:/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps, line 40) 
    in call from generate_deps__escript__1389__793192__493000:'-main/1-fun-0-'/6 (d:/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps, line 19) 
    in call from lists:foldl/3 (lists.erl, line 1248) 
    in call from generate_deps__escript__1389__793192__493000:main/1 (d:/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps, line 17) 
    in call from escript:run/2 (escript.erl, line 747) 
    in call from escript:start/1 (escript.erl, line 277) 
    in call from init:start_it/1 (init.erl, line 1054) 
    in call from init:start_em/1 (init.erl, line 1034) 

我已經張貼上引擎收錄完整的錯誤 - http://pastebin.com/S739wfhB 爲generate_deps的完整代碼可以在這裏找到 - http://pastebin.com/N4HVz8z1

詩篇。我使用Cygwin也嘗試過,但它返回另一個錯誤 - escript:無法打開文件:/首頁/富士通/ RabbitMQ的/建造源/ RabbitMQ的公共傘/ generate_deps

編輯1

CYGWIN返回:

$ make 
[elided] generate deps 
escript: Failed to open file: /cygdrive/d/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps 
[elided] generate deps 
escript: Failed to open file: /cygdrive/d/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps 
make: *** No rule to make target 'build/deps.mk', needed by 'ebin/presence_exchange.beam'. Stop. 

但是,我可以使用head命令打開文件。

[email protected] /cygdrive/d/RabbitMQ/build-source/rabbitmq-public-umbrella/presence-exchange-master 
$ head /cygdrive/d/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps 
#!/usr/bin/env escript 
%% -*- erlang -*- 
-mode(compile). 

%% We expect the list of Erlang source and header files to arrive on 
%% stdin, with the entries colon-separated. 
main([TargetFile, EbinDir]) -> 
    ErlsAndHrls = [ string:strip(S,left) || 
         S <- string:tokens(io:get_line(""), ":\n")], 
    ErlFiles = [F || F <- ErlsAndHrls, lists:suffix(".erl", F)], 

回答

1

最有可能的,這是因爲它無法找到您要打開的文件,這是什麼POSIX enoent錯誤表示。當你使用cygwin時,它更加明確。二郎神badmatch錯誤來自行23:

{ok, Hdl} = file:open(TargetFile, [write, delayed_write]), 

,你試圖打開{ok, Hld}文件和匹配。但是,file:open返回{error,enoent}找不到該文件時,導致匹配失敗並生成erlang錯誤。

編輯:

當我看到它的問題是它試圖寫入文件。你被允許寫入該目錄嗎?如果文件已經存在,您可以打開它來寫入文件?

+0

謝謝,但我可以使用head命令打開文件。請參閱上面的編輯1。可能是什麼原因? – Joshua

+0

你確定要試圖打開同一個文件嗎?同時'head'打開文件進行閱讀,而在你的代碼中,你嘗試打開文件進行寫入。該文件有哪些訪問模式,以及它是什麼類型的文件? – rvirding

+0

是的,它是同一個文件。 ls -l返回「-rwxr-xr-x 1富士通無2666 Jan 15 13:59 generate_deps」。我也試過chmod 777. generate_deps是某種bash文件,你可以在這裏看到代碼 - http://pastebin.com/N4HVz8z1 – Joshua

相關問題