【问题标题】:Phoenix/Elixir/Ejabberd - Response already sent errorPhoenix/Elixir/Ejabberd - 响应已发送错误
【发布时间】:2015-12-03 13:52:59
【问题描述】:

我按照本指南将 Ejabberd 嵌入到 Phoenix 应用程序 (https://blog.process-one.net/embedding-ejabberd-into-an-elixir-phoenix-web-application/) 中,现在它正在运行时出现错误。

基本上,在我导航到“http://localhost:4000/ejabberd”之前,一切似乎都正常,此时我收到以下错误:

[错误] #PID 运行 EjbrdTest.Endpoint 终止服务器: 本地主机:4000 (http) 请求:GET /ejabberd **(退出)引发异常: ** (Plug.Conn.AlreadySentError) 响应已经发送 (plug) lib/plug/conn.ex:428: Plug.Conn.resp/3 (plug) lib/plug/conn.ex:415: Plug.Conn.send_resp/3 (ejbrdTest) web/controllers/ejabberd_controller.ex:1: EjbrdTest.EjabberdController.phoenix_controller_pipeline/2 (ejbrdTest) lib/phoenix/router.ex:265: EjbrdTest.Router.dispatch/2 (ejbrdTest) web/router.ex:1: EjbrdTest.Router.do_call/2 (ejbrdTest) lib/ejbrdTest/endpoint.ex:1: EjbrdTest.Endpoint.phoenix_pipeline/1 (ejbrdTest) lib/plug/debugger.ex:90: EjbrdTest.Endpoint."call (overridable 3)"/2 (ejbrdTest) lib/phoenix/endpoint/render_errors.ex:34: EjbrdTest.Endpoint.call/2 (插件)lib/plug/adapters/cowboy/handler.ex:15:Plug.Adapters.Cowboy.Handler.upgrade/4 (cowboy) src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4

我在 jumbotron 中看到的不是用户列表:

在线用户:

我没有找到任何关于此的内容,有什么想法吗?

谢谢。如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: ejabberd elixir phoenix-framework


    【解决方案1】:

    该博文存在渲染问题(现已修复)。

    您可以从 Gist 下载实际源代码:https://gist.github.com/mremond/383666d563025e86adfe#file-index-html-eex

    【讨论】:

    • 不幸的是,这没有帮助。 ejabberd.html.eex 的确切来源:

      Hello World,ejabberd 遇见 Phoenix!

      这里是在线用户列表:

    • 您应该使用 gist 中的源代码从头开始学习教程。还有比这个文件更多的代码。
    • 谢谢,我会试一试,但我已经重新启动了几次,还尝试使用 gist 中的代码......我很困惑:P
    • 对,好吧,现在这已经纠正了我从来不知道的问题(没有像上面显示的那样正确显示),但是“响应已经发送”错误的更大问题仍然存在。以前见过这个吗?再次感谢。
    • 嗯,这实际上意味着响应已经发送并且可能在路由管道中的另一个模块中返回。您可能会在此页面上看到有关此错误的更多信息:blog.gazler.com/blog/2015/07/18/subdomains-with-phoenix
    【解决方案2】:

    删除 plug :action 将解决此问题。看起来现在默认调用它,因此该行会导致重复错误:

    https://github.com/phoenixframework/phoenix/issues/888

    【讨论】:

    • 谢谢,这对我有帮助!
    • 感谢您的回复!我已经好几个月没有使用 Elixir 了,但我可能会再次挖掘它并尝试一下。希望我不在的时候,文档储备变得更加成熟。
    【解决方案3】:

    就我而言,我正在通过路由器中的身份验证功能进行管道传输。该身份验证函数正在返回响应,但并未停止。一旦我在 conn 链的末尾添加了 |> halt(),我就可以开始了。

    只是想留下这个消息,以防我或其他人需要快速提醒。

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      相关资源
      最近更新 更多