Это немного странный вопрос.Мы пишем приложение elixir, которое будет тестировать различные части инфраструктуры различных приложений.
По сути, я хочу, но не смог, имитировать ошибку подключения Redis и иметь возможность восстановиться после этой ошибки.Поскольку Redix и Exredis, похоже, выдают ошибки из нового pid-соединения, я не могу ничего сделать.
Пример того, что нам, по сути, нужно:
def is_redis_down() do
{:ok, conn} = Redix.start_link("redis://wrong", name: :redix)
case Redix.command(conn, ["ping"]) do
{:ok, response} ->
Redix.stop(conn)
response !== "PONG"
{:error, _ } ->
GenServer.stop(conn, :normal)
true
end
end
Проблема в том, что если вы оставляете строку подключения неправильной, start_link возвращает Pid, но оператор case никогда не запускается.Это как start_link разбивает родительский pid.Любые идеи о том, как восстановить?Я просто хочу true, если он подключается и отправляет пинг, или false, если он не может подключиться.
Я пытался вложить в задачу и отдельный pid.