2012-09-14 174 views
2

最近我尝试安装并运行Erlang的boss_db ORM演示。erlang boss_db hello world?

这里是我做过什么:

  • 克隆库
  • cd boss_db/
  • rebar get-deps
  • 把一个简单的mydb.erl文件到src/

    -module(mydb). 
    
    -compile(export_all). 
    
    start() -> 
    

    DBOptions = [{adapte R,pgsql的}, {DB_HOST, “本地主机”}, {DB_PORT,5432}, {db_username, “postgres的”}, {DB_PASSWORD “为mypass”},
    {cache_enable,FALSE}, {cache_exp_time ,0}],

    boss_db:start(DBOptions)。

  • rebar compile

  • cd ebin/
  • 运行erl
  • mydb:start()

这里是我得到:

** exception exit: shutdown 

Whatam我做错了什么?它应该如何运行?

P.S.我试图运行应用程序:开始(boss_db),但结果是一样的。

P.P.S.我已经阅读了documentation两次,但我仍然不知道如何运行整个事情。

回答

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}]}]} 
+0

适合我,谢谢! – skanatek

2

您没有向代码路径添加依赖项。这就是为什么当找不到它们时抛出异常。不要cd进入ebin和erl。反而从当前目录运行

erl -pa ebin -pa deps/*/ebin 

顺便说一句,这不是一个很好的方式来做这种东西。请使用螺纹钢创建一个新的空应用程序。将reboss.config中的boss_db作为依赖项添加到您的应用程序中。把你自己的源文件放在src下。然后

rebar get-deps compile 
erl -pa ebin -pa deps/*/ebin 
+0

羊绒,我用螺纹钢创建了一个新的空应用程序,把boss_db放到了deps并编辑了rebar.config。现在我运行erl -pa ebin -pa deps/*/ebin,但是代码:is_loaded(boss_db)返回false。而且,代码:is_loaded(myapp)也返回false。 – skanatek

+0

您是否先编译您的应用程序? (rebar get-deps编译) – cashmere

+0

当然我编译它! – skanatek