Я новичок в elixir и недавно обнаружил, что GenServer
— это хороший способ управления клиент-серверным API. Поэтому я попытался создать модуль GenServer для управления подключением к базе данных, но потерпел неудачу. Ниже мой код:
defmodule RedisClient do
use GenServer
require Logger
# Client
def start(url) do
GenServer.start(__MODULE__, {url})
end
def init({url}) do
Logger.info("connect to url #{url}");
case Redix.start_link(url) do
{:ok, conn} -> {conn}
{:error, err} -> {:error, err}
end
end
end
Модуль RedisClient
используется для подключения к базе данных Redis в методе init(). Но он возвращает ошибку ниже:
iex(tbc@192-168-1-7)15> RedisClient.start("redis://localhost")
{:error, {:bad_return_value, {#PID<0.6623.0>}}}
iex(tbc@192-168-1-7)16>
17:58:20.592 [info] connect to url redis://localhost
nil
Я не понимаю, почему он возвращает ошибку и почему он печатает nil
в конце. Он отлично работает, если я вызываю Redis
напрямую, как показано ниже:
iex(tbc@192-168-1-7)17> Redix.start_link("redis://localhost")
{:ok, #PID<0.7443.0>}
Похоже, вызов API на Redix
не вызывает проблем, так что же не так с моей реализацией GenServer?