私下启动 poolboy 的地方?erlang 数据库连接池
where start the poolboy privately?erlang database connection pools
英语不好,请见谅!!!!
我使用 poolboy 作为我的数据库连接池,我已经阅读了 github:https://github.com/devinus/poolboy 上的 README.md
但最后我不知道我在什么地方启动了 poolboy 当我想要它启动时,然后我得到了一个 error:already_started
我的项目文件:http://pastebin.com/zus6dGdz
我用cowboy做我的http服务器,你可以无视
我这样启动程序:
1.I使用rebar编译
$钢筋清洁和制作
2.then 我使用 erl 运行 我的程序
$ erl -pa ebin/ -pa deps/*/ebin -s start 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!
您正在启动一个由 10 个具有相同注册名称的工人组成的池。当一个进程使用一个名称注册而另一个进程尝试使用相同的名称注册时,您会收到错误 already_started
.
在您的示例代码中,poolboy 的工作模块是 db_mongo_handler。 Poolboy 尝试通过调用 db_mongo_handler:start_link/1
来启动 10 个工人,实现为
start_link(Args) ->
gen_server:start_link({local, ?SERVER}, ?MODULE, Args, []).
第一个 worker 可以启动,但是当第二个 worker 启动时它崩溃 already_started
。
通常情况下,许多相似工人的工人不应该有注册名称。相反,只有池有一个名字,当你需要一个工人时,你要求 poolboy 使用 poolboy:checkout(mg_pool1)
.
交付其中一名工人的 pid()
要修复代码,请将 gen_server:start_link({local, ?SERVER}, ?MODULE, Args, [])
更改为 gen_server:start_link(?MODULE, Args, [])
。那就不用注册名字了。
英语不好,请见谅!!!! 我使用 poolboy 作为我的数据库连接池,我已经阅读了 github:https://github.com/devinus/poolboy 上的 README.md 但最后我不知道我在什么地方启动了 poolboy 当我想要它启动时,然后我得到了一个 error:already_started
我的项目文件:http://pastebin.com/zus6dGdz 我用cowboy做我的http服务器,你可以无视
我这样启动程序: 1.I使用rebar编译 $钢筋清洁和制作 2.then 我使用 erl 运行 我的程序 $ erl -pa ebin/ -pa deps/*/ebin -s start 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!
您正在启动一个由 10 个具有相同注册名称的工人组成的池。当一个进程使用一个名称注册而另一个进程尝试使用相同的名称注册时,您会收到错误 already_started
.
在您的示例代码中,poolboy 的工作模块是 db_mongo_handler。 Poolboy 尝试通过调用 db_mongo_handler:start_link/1
来启动 10 个工人,实现为
start_link(Args) ->
gen_server:start_link({local, ?SERVER}, ?MODULE, Args, []).
第一个 worker 可以启动,但是当第二个 worker 启动时它崩溃 already_started
。
通常情况下,许多相似工人的工人不应该有注册名称。相反,只有池有一个名字,当你需要一个工人时,你要求 poolboy 使用 poolboy:checkout(mg_pool1)
.
pid()
要修复代码,请将 gen_server:start_link({local, ?SERVER}, ?MODULE, Args, [])
更改为 gen_server:start_link(?MODULE, Args, [])
。那就不用注册名字了。