在Riak中使用来自氮气的Erlang客户端库

时间:2014-03-04 02:42:43

标签: erlang riak nitrogen

此问题是之前提出的Including the Erlang client lib的延续。

我可以通过更改:

来包含库
{mimetypes,     ".*",   {git, "git://github.com/spawngrid/mimetypes",   {branch, master}}},

%% Uncomment the following lines and comment the bottom lines with specific
%% tags to always pull the latest versions
{nitrogen_core, ".*",   {git, "git://github.com/nitrogen/nitrogen_core",{branch, master}}},

为:

{mimetypes,     ".*",   {git, "git://github.com/spawngrid/mimetypes",   {branch, master}}},

{riakc, "1.4.1",
          {git, "git://github.com/basho/riak-erlang-client", 
                       {tag, "1.4.1"}}},


%% Uncomment the following lines and comment the bottom lines with specific
%% tags to always pull the latest versions
{nitrogen_core, ".*",   {git, "git://github.com/nitrogen/nitrogen_core",{branch, master}}},
rel/nitrogen/rebar.config

并使用make

重新编译

既然我已经在lib文件夹下安装了这些文件夹,我不确定我应该将riakc_pb_socket库实现为suggested in the docs

我试过把

{ok, Pid} = riakc_pb_socket:start_link("127.0.0.1", 8087),

进入nitrogen_sup:init(),但我收到此错误消息:

application: nitrogen
exited: {{{badmatch,{error,{tcp,econnrefused}}},
          [{nitrogen_sup,init,1,
                         [{file,"/home/neil/proj/nitrogen/rel/nitrogen/site/src/nitrogen_sup.erl"},
                          {line,43}]},
           {supervisor,init,1,[{file,"supervisor.erl"},{line,239}]},
           {gen_server,init_it,6,[{file,"gen_server.erl"},{line,304}]},
           {proc_lib,init_p_do_apply,3,
                     [{file,"proc_lib.erl"},{line,239}]}]},
         {nitrogen_app,start,[normal,[]]}}
type: temporary

我是否应该在应用初始化期间将此连接与riak数据库建立一次,或者通常在处理新请求时进行此连接。我看到一些关于连接池的讨论,这是我在应用程序初始化期间设置的一次,然后链接到新进程。

我是erlang / OTP和这个框架的新手,所以任何方向都会受到高度赞赏。

加入:

当我通过bin/nitrogen console运行氮气应用时,我能够运行{ok, Pid} = riakc_pb_socket:start_link("127.0.0.1",8087).并且我确实设法从pong

获得riakc_pb_socket:ping(Pid).

我想现在的问题是:在哪些文件中,人们通常会设置/管理有关查询/读/写的riak连接?

1 个答案:

答案 0 :(得分:2)

实现目标的方法是:

  1. 创建一个gen_server,您将其添加到应用程序的主管树中。最好是您自己的应用程序。
  2. gen_server初始化时,它会设置Riak连接。只要您想使用该连接,就call gen_server,并且由于它具有连接,因此可以发出查询。
  3. 处理重新连接。如果连接丢失,则会导致gen_server崩溃。如果在初始化时拒绝连接,则稍等一会再重试。
  4. 通常,您会看到一个单独的应用程序运行Erlang系统的“后端”内容,然后运行另一个应用程序(如氮气)来处理Web内容。您的gen_server属于“后端”部分。

    一旦这个基础有效,你可以进一步扩展它:

    • 您的gen_server将位于名为foo的模块中。每当您想使用riak时,请致电foo:f(...)。重写foo:f(...)以使用http://github.com/devinus/poolboy或类似内容来支持向Riak群集的连接池。但只有在证明单个连接太慢时才这样做。

    这巧妙地展示了Erlang程序中松耦合的想法。 foo模块就像一个接口,但你不知道该接口背后的实现。如果需要,您可以稍后更改它以获得更快的速度。您唯一需要做的就是实现正确的协议,在这种情况下,这是一个函数调用。