【问题标题】:Strange error in Phoenix logs: running MyApp.Endpoint terminated凤凰日志中的奇怪错误:运行 MyApp.Endpoint 已终止
【发布时间】:2016-11-23 15:07:44
【问题描述】:

我在phoenix webapp 中遇到以下错误,我正在开发。这是一个简单的应用程序,只有几个模型和一个页面,其中所有模型创建表单都添加到一个多选项卡表单中。

我在日志中收到以下错误,但是在浏览器端一切正常。从日志中我也无法理解出了什么问题以及如何调试它。

[error] #PID<0.1603.0> running MyApp.Endpoint terminated
Server: localhost:4000 (http)
Request: GET /
** (exit) an exception was raised:
    ** (Plug.Conn.AlreadySentError) the response was already sent
        (plug) lib/plug/conn.ex:428: Plug.Conn.resp/3
        (plug) lib/plug/conn.ex:415: Plug.Conn.send_resp/3
        (my_app) web/controllers/personal_info_controller.ex:1: MyApp.PersonalInfoController.phoenix_controller_pipeline/2
        (my_app) lib/phoenix/router.ex:265: MyApp.Router.dispatch/2
        (my_app) web/router.ex:1: MyApp.Router.do_call/2
        (my_app) lib/my_app/endpoint.ex:1: MyApp.Endpoint.phoenix_pipeline/1
        (my_app) lib/plug/debugger.ex:90: MyApp.Endpoint."call (overridable 3)"/2
        (my_app) lib/phoenix/endpoint/render_errors.ex:34: MyApp.Endpoint.call/2
        (plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
        (cowboy) src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4

【问题讨论】:

  • 在这种情况下查看代码真的很有帮助(正如@Gazier 下面所说)。

标签: web elixir phoenix-framework


【解决方案1】:

当您复制响应时,您会收到此错误 - 这通常发生在您有一个插件会发送某个错误的响应(例如,用户未登录),然后从您的控制器操作发送另一个响应。

如果没有看到您的代码,很难告诉您问题出在哪里。发送响应后,您可以使用Plug.Conn.halt/1 来防止此错误。

例如

conn
|> send_resp(404, "Post not found")
|> halt

【讨论】:

    【解决方案2】:

    从控制器中删除 plug :action 为我修复了它。根据https://github.com/phoenixframework/phoenix/issues/888,不再需要它

    这个解决方案是在Phoenix/Elixir/Ejabberd - Response already sent error提出的

    【讨论】:

    • 这就是现在的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2012-11-30
    • 2017-06-05
    • 1970-01-01
    • 2014-01-27
    相关资源
    最近更新 更多