最近我尝试为Erlang安装并运行boss_db ORM的演示。
这是我做的:
cd boss_db/
rebar get-deps
将一个简单的mydb.erl文件放入src/
:
-module(mydb).
-compile(export_all).
start() ->
DBOptions = [{adapter,pgsql},
{db_host,“localhost”},
{db_port,5432},
{db_username,“postgres”},
{db_password,“mypass”},
{cache_enable,false},
{cache_exp_time,0}],
boss_db:启动(DBOptions)
rebar compile
cd ebin/
erl
mydb:start()
这是我得到的:
** exception exit: shutdown
我在这做错了吗?它应该如何运行?
P.S。我试图运行应用程序:start(boss_db),但结果是一样的。
P.P.S。我已经阅读了documentation两次,但我仍然不知道如何运行整个事情。
答案 0 :(得分:2)
您没有在代码路径中添加依赖项。这就是为什么在找不到它们时抛出异常的原因。不要cd进ebin和erl。而是运行
erl -pa ebin -pa deps/*/ebin
从当前目录。
顺便说一句,这不是做这种事情的好方法。而是使用钢筋创建一个新的空应用程序。在rebar.config中将boss_db作为依赖项添加到您的应用程序。将您自己的源文件放在src下。然后
rebar get-deps compile
erl -pa ebin -pa deps/*/ebin
答案 1 :(得分:1)
git clone git://github.com/evanmiller/boss_db.git
cd boss_db/
rebar get-deps
emacs src/mydb.erl
rebar compile
erl -pa ./ebin ./deps/*/ebin
这些步骤对我有用。在运行erl后,code:is_loaded()
将无法正常工作。只有在调用模块时,才会加载代码。
我确实关闭了应用程序,但这是因为代码正在尝试连接到Postgres数据库并且无法连接到它。
Erlang R15B02 (erts-5.9.2) [source] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9.2 (abort with ^G)
1> mydb:start().
** exception exit: shutdown
=ERROR REPORT==== 9-Oct-2012::12:13:07 ===
** Generic server <0.35.0> terminating
** Last message in was {'EXIT',<0.34.0>,
{{badmatch,
{error,
{{badmatch,
{error,
{{badmatch,{error,econnrefused}},
[{pgsql_sock,init,1,
[{file,"src/pgsql_sock.erl"},{line,51}]},
{gen_server,init_it,6,
[{file,"gen_server.erl"},{line,304}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,227}]}]}}},
[{boss_db_controller,init,1,
[{file,"src/boss_db_controller.erl"},{line,31}]},
{gen_server,init_it,6,
[{file,"gen_server.erl"},{line,304}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,227}]}]}}},
[{poolboy,new_worker,2,
[{file,"src/poolboy.erl"},{line,348}]},
{poolboy,prepopulate,4,
[{file,"src/poolboy.erl"},{line,370}]},
{poolboy,init,2,
[{file,"src/poolboy.erl"},{line,74}]},
{gen_fsm,init_it,6,
[{file,"gen_fsm.erl"},{line,361}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,227}]}]}}
** When Server state == {state,
{<0.35.0>,poolboy_sup},
simple_one_for_one,
[{child,undefined,boss_db_controller,
{boss_db_controller,start_link,
[[{size,5},
{max_overflow,10},
{adapter,pgsql},
{db_host,"localhost"},
{db_port,5432},
{db_username,"postgres"},
{db_password,"mypass"},
{cache_enable,false},
{cache_exp_time,0}]]},
temporary,brutal_kill,worker,
[boss_db_controller]}],
{set,0,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],
[]},
{{[],[],[],[],[],[],[],[],[],[],[],[],[],[],
[],[]}}},
0,1,[],poolboy_sup,
{boss_db_controller,
[{size,5},
{max_overflow,10},
{adapter,pgsql},
{db_host,"localhost"},
{db_port,5432},
{db_username,"postgres"},
{db_password,"mypass"},
{cache_enable,false},
{cache_exp_time,0}]}}
** Reason for termination ==
** {{badmatch,
{error,
{{badmatch,
{error,
{{badmatch,{error,econnrefused}},
[{pgsql_sock,init,1,
[{file,"src/pgsql_sock.erl"},{line,51}]},
{gen_server,init_it,6,
[{file,"gen_server.erl"},{line,304}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,227}]}]}}},
[{boss_db_controller,init,1,
[{file,"src/boss_db_controller.erl"},{line,31}]},
{gen_server,init_it,6,[{file,"gen_server.erl"},{line,304}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,227}]}]}}},
[{poolboy,new_worker,2,[{file,"src/poolboy.erl"},{line,348}]},
{poolboy,prepopulate,4,[{file,"src/poolboy.erl"},{line,370}]},
{poolboy,init,2,[{file,"src/poolboy.erl"},{line,74}]},
{gen_fsm,init_it,6,[{file,"gen_fsm.erl"},{line,361}]},
{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,227}]}]}