连接到Riak并通过Erlang存储数据

连接到Riak并通过Erlang存储数据,erlang,riak,Erlang,Riak,我的测试模块的目标是开始将我自己输入的数据存储在本地节点中 我已经在我的计算机上设置了一个本地节点。我还通过riak attach将一个新的erlang模块连接到它 在my module test.erl中,到目前为止只有riakConnect功能: riakConnect() -> riakc_pb_socket:start_link("127.0.0.1", 8087). 我在同一个模块中还有一个接收部分,它看起来类似于(现在它被注释掉了): 问题是,当我附加文件时,我会进入节点

我的测试模块的目标是开始将我自己输入的数据存储在本地节点中

我已经在我的计算机上设置了一个本地节点。我还通过riak attach将一个新的erlang模块连接到它

在my module test.erl中,到目前为止只有riakConnect功能:

riakConnect() ->
  riakc_pb_socket:start_link("127.0.0.1", 8087).
我在同一个模块中还有一个接收部分,它看起来类似于(现在它被注释掉了):

问题是,当我附加文件时,我会进入节点的控制台,上面说riakc_pb_socket:start_link()未定义,实际上那里没有任何反应


我想我遗漏了一些信息

您在运行节点时,路径中是否有
riakc\u pb\u socket
?如果您查看,您必须使用添加到
erl
path的已编译erlang二进制文件启动VM

$ erl -pa $PATH_TO_RIAKC/ebin $PATH_TO_RIAKC/deps/*/ebin
如果您在Erlang shell中,您可以验证是否能够使用
l(ModuleName)加载模块。
函数。您可以使用
code:get_path()。
检查路径(查找二进制文件的位置)。您也可以修改它(添加新目录),但一般来说,您应该有正确的VM启动脚本/命令

最后,如果您开发自己的应用程序(我认为您是),您可以研究以下工具。在那里,您可以描述所有依赖项,就像您的erlang riak客户端一样,他将帮助您下载和编译它们。有了它,您可以使用简单的

erl -pa ebin -pa deps/*/ebin

评论后编辑

Riak只是另一个应用程序,使用Erlang您实际上可以将wright连接到其中。就在里面工作生产的东西。但这是相当危险的,也可能是。你应该离开里亚克。至少它是内部的。特别是Riak为您提供了良好的稳定接口,可以从外部连接到它

让我们就这样做吧。我们将让您的Riaks节点运行,并编写另一个应用程序与之“对话”。在演讲中,我们将使用basho自己的语言

第一步是使用创建开发环境。休闲

除此之外,您现在拥有的
src
文件夹中几乎没有其他文件,您可以(并且将)放置自定义模块。您可以使用
/rebar compile
命令检查它是否编译。所有编译的文件都将位于
bin
文件夹中(与
src
的级别相同),并具有
.beam
扩展名(就像java具有
.java

接下来我们需要的是accual库。我们需要
riakc_pb_socket.beam
来运行
riakc_pb_socket
模块中的任何内容。最简单的方法是下载源代码并编译它们。这很容易,因为我们用钢筋做建筑材料

我们将创建
rebar.config
文件并用依赖项填充它

{deps, [{ riakc, ".*" ,
          {git, "https://github.com/basho/riak-erlang-client.git", {branch, "1."}}}
       ]}.
下载并编译这些

$ ./rebar get-deps compile
现在,您应该能够启动新的ErlangVM,给它起个名字,添加到bineries的路径(从自定义模块和依赖项),并从shell运行代码

$ erl -sname myapp -pa ebin -pa deps/*/ebin 
(myapp@localhost) 1> custom_module:riakConnect().
它应该就这样过去了

如果您想直接从系统控制台运行一些代码,请查看
erl-run
或escript


这应该能让你走了。

如果我运行riak attach,我会进入erlang shell,它会说:(riak@127.0.0.1)这意味着我已经在壳中了。我仍然不知道如何使用riak客户端库。我刚刚试着编写riakConnect()->riak:connect('127.0.0.1')。我得到了{好的,{riak_客户,['riak@local“,未定义]}]}我将在我的答案中添加一些内容。你有Java(或任何编程)的经验吗?我只是想确定我可以比较你的用例。再说一遍,你的用例是什么?您是否需要与Riak交互的Erlang应用程序,还是希望从内部修补Riak,还是只需要用一些数据填充Riak?是的,我知道Java。快速提问。所以,如果我通过erlang客户端启动ERKVM,这是否意味着我所要做的就是用端口指定本地riak的IP,就这样?现在我只想通过我自己的模块将手动数据(使用io:get_line)输入Riak。
$ ./rebar get-deps compile
$ erl -sname myapp -pa ebin -pa deps/*/ebin 
(myapp@localhost) 1> custom_module:riakConnect().