此问题是之前提出的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连接?
答案 0 :(得分:2)
实现目标的方法是:
gen_server
,您将其添加到应用程序的主管树中。最好是您自己的应用程序。gen_server
初始化时,它会设置Riak连接。只要您想使用该连接,就call
gen_server
,并且由于它具有连接,因此可以发出查询。gen_server
崩溃。如果在初始化时拒绝连接,则稍等一会再重试。通常,您会看到一个单独的应用程序运行Erlang系统的“后端”内容,然后运行另一个应用程序(如氮气)来处理Web内容。您的gen_server
属于“后端”部分。
一旦这个基础有效,你可以进一步扩展它:
foo
的模块中。每当您想使用riak时,请致电foo:f(...)
。重写foo:f(...)
以使用http://github.com/devinus/poolboy或类似内容来支持向Riak群集的连接池。但只有在证明单个连接太慢时才这样做。这巧妙地展示了Erlang程序中松耦合的想法。 foo
模块就像一个接口,但你不知道该接口背后的实现。如果需要,您可以稍后更改它以获得更快的速度。您唯一需要做的就是实现正确的协议,在这种情况下,这是一个函数调用。