2014-04-19 4 views
0

J'écris une application erlang ranch avec des protobuffs (basho), et j'inclus le test_pb.hrl au début, (include("test_pb.hrl")). mais quand je fais l'application et courir, il a l'erreur: {'module could not be loaded', [{protobuffs,next_field_num,[<<10,5,116,101,115,116,49>>],[]}, {test_pb,decode,3,[{file,"src/test_pb.erl"},{line,143}]}, {test_pb,decode,2,[{file,"src/test_pb.erl"},{line,138}]}, {reverse_protocol,handle_info,2, [{file,"src/reverse_protocol.erl"},{line,47}]}, {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,604}]}, {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,239}]}]}erlang erreur protobuf: le module n'a pas pu être chargé

et ligne, 47 est: Msgdata = test_pb:decode_test(Data),

l'ensemble du fichier source est: ` %% Vous pouvez utiliser, réutiliser et de mauvais traitements le code dans ce fichier.

-module(reverse_protocol). 
-behaviour(gen_server). 
-behaviour(ranch_protocol). 
-import(lists, [reverse/1]). 
-include("test_pb.hrl"). 
%% API. 
-export([start_link/4]). 

%% gen_server. 
-export([init/1]). 
-export([init/4]). 
-export([handle_call/3]). 
-export([handle_cast/2]). 
-export([handle_info/2]). 
-export([terminate/2]). 
-export([code_change/3]). 

-define(TIMEOUT, 5000). 

-record(state, {socket, transport}). 

%% API. 

start_link(Ref, Socket, Transport, Opts) -> 
proc_lib:start_link(?MODULE, init, [Ref, Socket, Transport, Opts]). 

%% gen_server. 

%% This function is never called. We only define it so that 
%% we can use the -behaviour(gen_server) attribute. 
init([]) -> {ok, undefined}. 

init(Ref, Socket, Transport, _Opts = []) -> 
ok = proc_lib:init_ack({ok, self()}), 
ok = ranch:accept_ack(Ref), 
ok = Transport:setopts(Socket, [{active, once}]), 
gen_server:enter_loop(?MODULE, [], 
    #state{socket=Socket, transport=Transport}, 
    ?TIMEOUT). 

handle_info({tcp, Socket, Data}, State=#state{ 
    socket=Socket, transport=Transport}) -> 
Transport:setopts(Socket, [{active, once}]), 
io:format("receive data ~p~n", [Data]), 
Msgdata = test_pb:decode_test(Data), 
io:format("receive data unpack ~p~n", [Msgdata]), 
Transport:send(Socket, reverse_binary(Data)), 
{noreply, State, ?TIMEOUT}; 
handle_info({tcp_closed, _Socket}, State) -> 
{stop, normal, State}; 
handle_info({tcp_error, _, Reason}, State) -> 
{stop, Reason, State}; 
handle_info(timeout, State) -> 
{stop, normal, State}; 
handle_info(_Info, State) -> 
{stop, normal, State}. 

handle_call(_Request, _From, State) -> 
{reply, ok, State}. 

handle_cast(_Msg, State) -> 
{noreply, State}. 

terminate(_Reason, _State) -> 
ok. 

code_change(_OldVsn, State, _Extra) -> 
{ok, State}. 

%% Internal. 

reverse_binary(B) when is_binary(B) -> 
[list_to_binary(lists:reverse(binary_to_list(
    binary:part(B, {0, byte_size(B)-2}) 
))), "\r\n"]. 

`

Répondre

0

La machine virtuelle ne peut pas trouver le module protobuffs. Essayez d'ajouter -pz deps/*/ebin aux options de démarrage à condition que vous ayez une application Protobuffs dans votre dossier Deps.

0

Si vous n'êtes pas sûr que le module est chargé ou non, essayez XXXX: module_info() dans le shell erlang. Si erreur, il n'est pas dans le chemin et essayez le code: paths ("xxxxxx/ebin") pour l'ajouter.

Questions connexes