Phoenix + Ueberauth + Google + Heroku: внутренняя ошибка сервера

Я относительно новичок в Эликсире и Фениксе (вероятно, поэтому я понятия не имею, что происходит).

Я пытаюсь настроить Ueberauth в приложении Phoenix с аутентификацией Google.

Я следил за образцом приложения https://github.com/ueberauth/ueberauth_example так точно, как только мог.

Я подготовил приложение для Heroku, как говорится в документации Phoenix. Домашняя страница отображается корректно. Когда я нажимаю на свою кнопку, чтобы начать процесс аутентификации, я дохожу до Google, и Google спрашивает меня, хочу ли я пройти аутентификацию. Когда я нажимаю «Да», я получаю внутреннюю ошибку сервера, и я действительно не знаю, что с ней происходит.

Вот что у меня в логах:

2016-03-24T04:02:14.429507+00:00 приложение[web.1]: 04:02:14.429 [ошибка] #PID‹0.364.0> запуск GreatStrides.Конечная точка прекращена

2016-03-24T04:02:14.429520+00:00 приложение[web.1]: Сервер: MYHEROKUAPP:80 (http)

2016-03-24T04:02:14.429521+00:00 приложение[web.1]: Запрос: GET /auth/google/callback?code=ACODEGOESHERE

2016-03-24T04:02:14.429522+00:00 приложение[web.1]: ** (выход) завершено в: :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", [], ноль, ноль, ноль , 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 приложение[web.1]: ** (ВЫХОД) нет процесса

Что тут происходит?


person Trevoke    schedule 24.03.2016    source источник


Ответы (1)


Это должен быть комментарий, но он слишком длинный.

Есть ли у вас другие ошибки? Потому что это выглядит неполным.

Когда в приложении Elixir что-то не так, дерево наблюдения следит за тем, чтобы все процессы, которые столкнулись с ошибкой, умирали. Вот почему вы можете видеть первую строку GreatStrides.Endpoint terminated.

Вторая и третья строки - это обычный лог.

Четвертая строка — ошибка вызова gen_server. Он печатает вызов функции со всеми тремя аргументами: server, request, timeout. Вы можете проверить аргументы, если они верны, но это некоторые внутренности клиентской записи хакни. Клиент GenServer просто ждет ответа здесь бесконечное количество времени - ничего не должно пойти не так.

Это означает, что внутри GenServer должен быть еще один отчет о сбое. Он может быть похож на предыдущий. Там вы должны быть в состоянии найти настоящую причину. Если GenServer дает сбой во время выполнения своей работы, все клиенты, ожидающие ответа, уведомляются о том, что он exited.

РЕДАКТИРОВАТЬ: после редактирования @Trevoke

Проблема заключалась в том, что hackney gen_server не работал, и это вызвало ошибку. Проверка с помощью Application.loaded_applications показала, что приложение hackney вообще не запущено и его нужно добавить в раздел applications в mix.exs.

person tkowal    schedule 24.03.2016
comment
Это часть проблемы. Это все логи, которые я вижу. Строка прямо перед GET /auth/google/callback. Я не знаю, как увеличить ведение журнала, и я также не могу сказать, как попробовать и протестировать это локально. - person Trevoke; 24.03.2016
comment
Ладно, была еще одна строчка. Я добавил это. Пишет `(ВЫХОД) нет процесса. - person Trevoke; 24.03.2016
comment
Это означает, что процесс :hackney_manager никогда не существовал. Это началось? Вы можете проверить Application.loaded_applications? :hackney здесь? Что происходит, когда вы вводите Application.start(:hackney)? - person tkowal; 24.03.2016
comment
Я использовал iex -S mix для проверки. :hackney нет в списке. Попытка запустить хакни дает это: {:error, {:not_started, :idna}} - person Trevoke; 26.03.2016
comment
Итак: я добавил :httpoison в список приложений в mix.exs, и это помогло. Теперь я просто не знаю, почему это произошло и почему у меня такое несоответствие между моим кодом и примером приложения, на которое я ссылался выше. - person Trevoke; 26.03.2016
comment
Если хотя бы одна из зависимостей во всем дереве зависимостей запускает хакни (указывается в приложениях в mix.exs), она должна быть доступна для всей системы. Не уверен, что еще я могу сделать, чтобы отладить это. - person tkowal; 26.03.2016
comment
Ну, ты сыграл важную роль. Остальное — это разговор, который мне нужно вести вверх по течению. Спасибо за помощь! Я собираюсь отметить ваш ответ как принятый; Я бы попросил вас отредактировать его, добавив, что проблема :hackney не выполняется вместе с командой Application.loaded_applications. - person Trevoke; 26.03.2016