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



这个问题是前面问过的Include 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

我试过放

{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).,并且我确实设法从riakc_pb_socket:ping(Pid).获得了pong

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

让事情继续下去的一种方法是:

  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模块的作用就像一个接口,但您不知道该接口背后的实现。如果需要,您可以稍后将其更改为更快的版本。您唯一需要做的就是实现正确的协议,在这种情况下,这是一个函数调用。

最新更新