Elixir 无法使用GenServer在上运行init方法

Elixir 无法使用GenServer在上运行init方法,elixir,elixir-mix,Elixir,Elixir Mix,我是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 Log

我是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
用于在其init()方法中连接到redis数据库。但它返回以下错误:

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

似乎对
Redix
的API调用没有问题,那么我的GenServer实现有什么问题吗?

如果成功,您需要从
init/1
返回
{:ok,state}

{:ok, conn} -> {:ok, conn}
或者,由于您返回的正是
Redix.start\u link
返回的内容,您只需返回:

def init({url}) do
  Logger.info("connect to url #{url}");
  Redix.start_link(url)
end

成功时,您需要从
init/1
返回
{:ok,state}

{:ok, conn} -> {:ok, conn}
或者,由于您返回的正是
Redix.start\u link
返回的内容,您只需返回:

def init({url}) do
  Logger.info("connect to url #{url}");
  Redix.start_link(url)
end