【问题标题】:Connect to Riak and store data via Erlang通过 Erlang 连接到 Riak 并存储数据
【发布时间】:2014-10-25 08:17:46
【问题描述】:

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

我已经在我的电脑上设置了一个本地节点。我还通过 riak attach 附加了一个新的 erlang 模块。

在我的模块 test.erl 中目前只有 riakConnect 函数:

riakConnect() ->
  riakc_pb_socket:start_link("127.0.0.1", 8087).

我在同一个模块中也有一个接收部分,看起来类似于(现在它被注释掉了):

riakReceive() ->
  receive
     {store, Bucket, Key, Value} ->
         ...
  end.

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

我想我在这里遗漏了一些信息。

【问题讨论】:

    标签: erlang riak


    【解决方案1】:

    您是否在路径中使用riakc_pb_socket 运行您的节点?如果您查看repo's readme,您必须使用添加到erl 路径的已编译erlang 二进制文件来启动您的VM

    $ erl -pa $PATH_TO_RIAKC/ebin $PATH_TO_RIAKC/deps/*/ebin
    

    如果您在 Erlang shell 中,您可以验证您是否能够使用 l(ModuleName). 函数加载模块。您可以使用code:get_path(). 检查您的路径(在哪里查找二进制文件)。您也可以修改它(添加新目录),但作为一般规则,您应该有正确的 VM 启动脚本/命令。

    最后,如果您开发自己的应用程序(我认为您是),您可以研究像 rebar 这样的工具。在那里你可以描述你所有的依赖,比如你的 erlang-riak 客户端,他会帮助你下载和编译它们。有了这个,你可以用简单的方式启动你的虚拟机

    erl -pa ebin -pa deps/*/ebin
    

    在 cmets 之后编辑

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

    所以让我们这样做吧。我们将让您的 Riaks 节点运行,并编写另一个将与其“对话”的应用程序。为了说话,我们将使用来自 basho 本身的riak-erlang client

    第一步是使用rebar build tool 创建开发环境。闲散getting started guide

    $ mkdir myapp
    $ cd myapp
    $ wget https://raw.github.com/wiki/rebar/rebar/rebar && chmod u+x rebar
    $ rebar create-app appid=myapp
    

    您现在拥有的其他文件很少,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
    

    现在您应该能够启动新的 Erlang VM,为其命名,添加二进制文件的路径(来自自定义模块和依赖项)并从 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) 1> 这意味着我已经在 shell 中了。我仍然不知道如何在那里使用 riak 客户端库。我刚刚尝试编写 riakConnect() -> riak:connect('127.0.0.1')。我得到了{ok, {riak_client, ['riak@local', undefined]}]}
    • 我会在我的答案中添加一些内容。您有任何 Java(或任何编程)经验吗?我只是想确定我可以比较您的用例。
    • 你的用例又是什么?您是否需要与 Riak 交互的 Erlang 应用程序,或者您想从内部修改 Riak,还是只需要向 Riak 填充一些数据?
    • 是的,我知道 Java。快速提问。因此,如果我通过 erlang 客户端启动 erk vm,这是否意味着我所要做的只是用端口指定我的本地 riak 的 IP,仅此而已?然后它就会知道在哪里存储所有内容。
    • 现在我只想通过我自己的模块将手动数据(使用 io:get_line)输入到 Riak。
    猜你喜欢
    • 2015-03-21
    • 2014-06-29
    • 2016-11-05
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多