Erlang gen_服务器:调用导致服务器与noproc崩溃

Erlang gen_服务器:调用导致服务器与noproc崩溃,erlang,otp,Erlang,Otp,我有一个简单的服务器(如下)。我可以用cell\u tracer:start\u link()创建服务器,这样就可以了;我知道这一点,因为当我重复同一个呼叫时,我得到一个已启动的错误。问题是,在创建服务器后,使用cell\u tracker:get\u cells()(或对其执行任何gen\u server:call(…))会导致服务器退出,出现如下异常: ** exception exit: {noproc,{gen_server,call,[cell_tracker,get_cells]}}

我有一个简单的服务器(如下)。我可以用
cell\u tracer:start\u link()
创建服务器,这样就可以了;我知道这一点,因为当我重复同一个呼叫时,我得到一个已启动的
错误。问题是,在创建服务器后,使用
cell\u tracker:get\u cells()
(或对其执行任何
gen\u server:call(…)
)会导致服务器退出,出现如下异常:

** exception exit: {noproc,{gen_server,call,[cell_tracker,get_cells]}}
     in function  gen_server:call/2 (gen_server.erl, line 180)
我可以直接调用
handle\u调用(get\u cells…
),得到预期的结果

我不知道这里发生了什么。它没有给我太多的信息来处理,我也看不出有什么问题。我怎样才能更深入地了解这一点

-module(cell_tracker).
-behavior(gen_server).
-export([start_link/0, stop/0]).
-export([add_cell/1, del_cell/1, get_cells/0]).
-export([init/1,
         handle_cast/2,
         handle_call/3,
         terminate/2,
         handle_info/2,
         code_change/3]).

%% operational api
start_link() ->
  gen_server:start_link({global, ?MODULE}, ?MODULE, [], []).

stop() ->
  gen_server:cast(?MODULE, stop).

%% traking api

add_cell(Cell) ->
  gen_server:call(?MODULE, { add_cell, Cell }).

del_cell(Cell) ->
  gen_server:call(?MODULE, { del_cell, Cell }).

get_cells() ->
  gen_server:call(?MODULE, get_cells).

%% gen_server callbacks

init(Coords) ->
  {ok, Coords}.

handle_cast(stop, Coords) ->
  {stop, normal, Coords}.

handle_call({add_cell, Cell}, _From, Cells) ->
  {reply, ok, [Cell|Cells]};
handle_call({del_cell, Cell}, _From, Cells) ->
  {reply, ok, Cells -- Cell};
handle_call(get_cells, _From, Cells) ->
  {reply, Cells, Cells}.

terminate(unnormal, _State) -> ok.

handle_info(_,_) -> ok.
code_change(_,State,_) -> {ok, State}.

在本地注册服务器

start_link() ->
  gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
或者,如果您注册了
{global,?MODULE}
cast,请调用
{global,?MODULE}


请参见

我在使用python(2.7)和couchdb(2.1)时遇到了同样的问题。 重点是我确实保存了没有id的文档

import couchdb
server = couchdb.Server('http://admin:PASSWORD@127.0.0.1:5984/')
db = server.create('numbers')
idd, revv = db.save({"taras":"vaskiv"})
在这之后,我得到了这个例外

431         # Store cachable responses
ServerError: (500, (u'noproc', u'{gen_server,call,[couch_uuids,create]}'))
但当我用id保存文档时,一切似乎都很好

idd, revv = db.save({"taras":"vaskiv", "_id": "55"})
是的,您必须在本地注册流程并在本地调用它,或者在全局注册并在全局调用它。它们是两个独立的名称空间。