0
私はelixirに新しく、最近GenServer
がクライアント/サーバーAPIを管理する良い方法であることがわかりました。そこで、データベース接続を管理するGenServerモジュールを作成しようとしましたが失敗しました。GenServerを使用してinitメソッドを実行できませんでした
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
がそのinit()メソッドでRedisのデータベースに接続するために使用される:以下私のコードです。しかし、それはエラーの下に返します。それは最後にnil
を印刷し、なぜそれがエラーを返し、なぜ私は理解していない
iex([email protected])15> RedisClient.start("redis://localhost")
{:error, {:bad_return_value, {#PID<0.6623.0>}}}
iex([email protected])16>
17:58:20.592 [info] connect to url redis://localhost
nil
。
iex([email protected])17> Redix.start_link("redis://localhost")
{:ok, #PID<0.7443.0>}
Redix
のAPIコールは問題がないようですので、私のGenServerの実装の何が問題:私は以下のように直接Redis
を呼び出す場合は正常に動作しますか?あなたが成功した場合にinit/1
から{:ok, state}
を返す必要が