4

我试图让Hyperledger在复制的私有池模式下工作。他们的论坛中没有回复,因此这里的问题。此外,这个问题纯粹是关于技术错误。

Hyperledger 使用 Phoenix、Cowboy、Elixir、Ecto、Erlang、Postgre SQL、Node.js 等。主节点处理请求,在几个表中插入一行并向辅助节点广播消息。辅助节点执行类似的操作并将消息发送回主节点以继续处理。这是问题开始的地方。主节点现在尝试读取它之前插入的行,但得到 nil 结果。此后引发以下异常。

** (exit) an exception was raised:
    ** (RuntimeError) expected :action/2 to return a Plug.Conn
        (hyperledger) web/controllers/log_entry_controller.ex:1: Hyperledger.LogEntryController.phoenix_controller_pipeline/2
        (hyperledger) lib/phoenix/router.ex:297: Hyperledger.Router.dispatch/2
        (hyperledger) lib/phoenix/router.ex:2: Hyperledger.Router.call/2
        (hyperledger) lib/hyperledger/endpoint.ex:1: Hyperledger.Endpoint.phoenix_endpoint_pipeline/1
        (hyperledger) lib/plug/debugger.ex:90: Hyperledger.Endpoint."call (overridable 3)"/2
        (hyperledger) lib/phoenix/endpoint/render_errors.ex:34: Hyperledger.Endpoint.call/2
        (phoenix) lib/phoenix/endpoint/cowboy_handler.ex:50: Phoenix.Endpoint.CowboyHandler.upgrade/4
        (cowboy) src/cowboy_protocol.erl:435: :cowboy_protocol.execute/4

为什么主节点无法读取在广播发送到辅助节点之前插入的内容。我怀疑与陈旧的数据库连接或类似的事情有关。任何帮助将不胜感激。如果我应该分享其他信息,请告诉我。

4

1 回答 1

9

您的控制器中有一个操作没有返回conn. 所有操作都必须接收conn并返回更新的conn.

于 2015-07-29T06:43:30.247 回答