expected:action / 2返回Phoenix控制器

时间:2015-07-29 06:05:22

标签: elixir phoenix-framework ecto

我试图让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

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

1 个答案:

答案 0 :(得分:9)

您的控制器中有一个未返回conn的操作。所有操作都必须收到conn并返回更新后的conn