2015-02-03 2 views
-1

英语 不好, 请 见谅 !!!! я использую poolboy как мои пулы соединений базы данных, я прочитал README.md на GitHub: https://github.com/devinus/poolboy Но в конце концов я не konw, где я начал poolboy, когда я хочу, чтобы начать, то я получил сообщение об ошибке: already_startedгде начать poolboy частной Erlang базы данных пулов соединений

файлов моего проекта: http://pastebin.com/zus6dGdz я использую ковбой, чтобы мой сервер HTTP, но вы можете его игнорировать.

запуск программы, как это: 1.I использовать арматуру для компиляции $ арматурной стали чистой & сделать 2.Then я использую ERL запустить мою программу $ Эрла -pa Эбин/-pa Deps/*/Эбин -s начать server_start Но я получил ошибки следующим образом:

=CRASH REPORT==== 3-Feb-2015::17:47:27 === 
    crasher: 
    initial call: poolboy:init/1 
    pid: <0.171.0> 
    registered_name: [] 
    exception exit: {{badmatch,{error,{already_started,<0.173.0>}}}, 
        [{poolboy,new_worker,1, 
           [{file,"src/poolboy.erl"},{line,260}]}, 
         {poolboy,prepopulate,3, 
           [{file,"src/poolboy.erl"},{line,281}]}, 
         {poolboy,init,3,[{file,"src/poolboy.erl"},{line,143}]}, 
         {gen_server,init_it,6, 
            [{file,"gen_server.erl"},{line,306}]}, 
         {proc_lib,init_p_do_apply,3, 
           [{file,"proc_lib.erl"},{line,237}]}]} 
     in function gen_server:init_it/6 (gen_server.erl, line 330) 
    ancestors: [hello_erlang_sup,<0.66.0>] 
    messages: [] 
    links: [<0.172.0>,<0.173.0>,<0.170.0>] 
    dictionary: [] 
    trap_exit: true 
    status: running 
    heap_size: 610 
    stack_size: 27 
    reductions: 205 
    neighbours: 
    neighbour: [{pid,<0.173.0>}, 
        {registered_name,db_mongo_handler}, 
        {initial_call,{db_mongo_handler,init,['Argument__1']}}, 
        {current_function,{gen_server,loop,6}}, 
        {ancestors,[<0.172.0>,mg_pool1,hello_erlang_sup,<0.66.0>]}, 
        {messages,[]}, 
        {links,[<0.172.0>,<0.174.0>,<0.171.0>]}, 
        {dictionary,[]}, 
        {trap_exit,false}, 
        {status,waiting}, 
        {heap_size,233}, 
        {stack_size,9}, 
        {reductions,86}] 

Пожалуйста, помогите решить проблему THS!

ответ

3

Вы собираетесь создать пул из 10 сотрудников с таким же именем. Когда процесс регистрируется с именем, а другой процесс пытается зарегистрироваться с тем же именем, вы получаете ошибку already_started.

В вашем примере кода рабочим модулем для poolboy является db_mongo_handler. Poolboy пытается запустить 10 сотрудников по телефону db_mongo_handler:start_link/1, который реализуется в

start_link(Args) -> 
    gen_server:start_link({local, ?SERVER}, ?MODULE, Args, []). 

Первый работник может начать, но, когда начинается второй рабочий он падает с already_started.

Обычно работники пула многих подобных работников не должны иметь зарегистрированного имени. Вместо этого, только у пула есть имя, и когда вам нужен работник, вы спрашиваете у пулбоя поставить pid() одного из работников, используя poolboy:checkout(mg_pool1).

Чтобы исправить код, измените gen_server:start_link({local, ?SERVER}, ?MODULE, Args, []) на gen_server:start_link(?MODULE, Args, []). Тогда он не будет зарегистрирован с именем.

+0

Спасибо за ваш ответ, вы правы. :-). Хороший день !!!! –

+0

У вас есть время, чтобы помочь мне решить anthor one probem? Просто в той же программе :-) http://stackoverflow.com/questions/28315299/why-the-error-function-clause-about-erlang-mongodb- Эрл-MongoDB –

Смежные вопросы