我试图让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
为什么主节点无法读取在广播发送到辅助节点之前插入的内容。我怀疑与陈旧的数据库连接或类似的东西有关。任何帮助将不胜感激。如果我应该分享更多信息,请告诉我。
答案 0 :(得分:9)
您的控制器中有一个未返回conn
的操作。所有操作都必须收到conn
并返回更新后的conn
。