凤凰 + Ueberauth + 谷歌 + Heroku:内部服务器错误

3

我对Elixir和Phoenix相对较新(这可能是我不知道发生了什么的原因)。

我正在尝试在Phoenix应用程序上设置使用Google身份验证的Ueberauth。

我尽可能忠实地遵循了示例应用https://github.com/ueberauth/ueberauth_example

我按照Phoenix文档准备了Heroku应用程序。主页显示正常。当我单击开始认证过程的按钮时,我到达了Google,并且Google问我是否要进行身份验证。当我点击是时,我收到一个内部服务器错误,而我真的不知道发生了什么。

以下是日志中的内容:

2016-03-24T04:02:14.429507+00:00 app[web.1]: 04:02:14.429 [错误] #PID<0.364.0> 运行的 GreatStrides.Endpoint 终止

2016-03-24T04:02:14.429520+00:00 app[web.1]: 服务器: MYHEROKUAPP:80 (http)

2016-03-24T04:02:14.429521+00:00 app[web.1]: 请求:GET /auth/google/callback?code=ACODEGOESHERE

2016-03-24T04:02:14.429522+00:00 app[web.1]: ** (exit) 在以下情况下退出: :gen_server.call(:hackney_manager, {:new_request, #PID<0.364.0>, #Reference<0.0.1.2373>, {:client, :undefined, {:metrics_ng, :metrics_dummy}, :hackney_ssl_transport, 'accounts.google.com', 443, "accounts.google.com", [], nil, nil, nil, true, :hackney_pool, 5000, false, 5, false, 5, nil, nil, nil, :undefined, :start, nil, :normal, false, false, false, :undefined, false, nil, :waiting, nil, 4096, "", [], :undefined, nil, nil, nil, nil, :undefined, nil}}, :infinity)

2016-03-24T11:54:59.195968+00:00 app[web.1]: ** (EXIT) 没有进程

这里发生了什么?
1个回答

2

这本来应该是一条注释,但太长了。

你还有其他的错误吗?因为这看起来不完整。

当Elixir应用程序发生错误时,监管树会确保所有遇到错误的进程都会死亡。这就是为什么你可以看到第一行GreatStrides.Endpoint终止

第二和第三行只是普通的日志。

第四行是一个调用gen_server的错误。它打印了带有三个参数的函数调用:server,request,timeout。你可以检查这些参数是否正确,但这些都是hackneys客户端记录的内部机制。GenServer客户端在此处无限等待答案-没有什么应该出错的。

这意味着应该从GenServer内部发现另一个崩溃报告。它可能与之前的类似。在那里,你应该能够找到实际原因。如果GenServer在进行其工作时崩溃,则等待答案的所有客户端都会被通知它退出

编辑后:由@Trevoke编辑后

问题是hackney gen_server未运行,导致了此错误。使用Application.loaded_applications检查后发现,hackney应用程序根本没有运行,并且需要将其添加到applications部分中的mix.exs


这是问题的一部分。这是我看到的所有日志。它前面的那行是“GET /auth/google/callback”。我不知道如何增加日志记录,也无法确定如何在本地尝试和测试它。 - Trevoke
好的,还有一行。我加上了。它说“(退出)没有进程”。 - Trevoke
这意味着 :hackney_manager 进程从未存在过。它被启动了吗?您可以检查 Application.loaded_applications 吗?是否有 :hackney?当您输入 Application.start(:hackney) 时会发生什么? - tkowal
好的,所以:我在 mix.exs 的应用程序列表中添加了 :httpoison,这样就解决了问题。现在我只是不知道为什么会发生这种情况,以及为什么我的代码与上面链接的示例应用程序存在不匹配。 - Trevoke
如果依赖树中的至少一个依赖项以hackney(在mix.exs中列出应用程序)开头,则它应该对整个系统可用。不确定我还能做什么来调试这个问题。 - tkowal
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接