0

这个问题是之前提出的包括 Erlang 客户端库的延续。

我能够通过更改来包含该库:

{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.configmake 重新编译

现在我已经在lib文件夹下安装了那些,我不确定应该按照文档中的建议在riakc_pb_socket哪里实施lib

我试过把

{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).并且我确实设法pongriakc_pb_socket:ping(Pid).

我想现在的问题是:通常在哪些文件中设置/管理关于查询/读取/写入的 riak 连接?

4

1 回答 1

2

做事的一种方法是:

  1. 创建一个gen_server您添加到应用程序的主管树的。最好是您自己包含的应用程序。
  2. 初始化时gen_server,它会建立一个 Riak 连接。每当你想使用连接时,你callgen_server因为它有连接,它将能够发出查询。
  3. 手柄重新连接。如果连接丢失,您将崩溃gen_server。如果初始化时连接被拒绝,请稍等片刻,然后重试。

通常,您会看到一个单独的应用程序运行 Erlang 系统的“后端”内容,然后另一个应用程序(如氮气)来处理 Web 内容。您gen_server将属于“后端”部分。

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

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

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

于 2014-03-04T13:38:17.607 回答