【问题标题】:Elixir GenServer no processElixir GenServer 无进程
【发布时间】:2017-10-16 09:13:42
【问题描述】:

我正在关注this tutorial ,与教程和他们的 GH 存储库相比,我已经对代码进行了两次和三次检查,但我无法弄清楚为什么在运行 mix test 时会出现此错误

我对 Elixir 很陌生,所以我还不是很擅长调试,所以如果这超级简单,请原谅

board_server.ex Gist

game_of_life.ex Gist

还有我的测试文件

defmodule GameOfLife.BoardServerTest do
  use ExUnit.Case
  doctest GameOfLife.BoardServer
end

我得到的错误是:

test/board_server_test.exs:3
 ** (exit) exited in: GenServer.call({:global, GameOfLife.BoardServer}, {:start_game, 1000}, 5000)
     ** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started
 stacktrace:
   (elixir) lib/gen_server.ex:729: GenServer.call/3
   (for doctest at) lib/game_of_life/board_server.ex:121: (test)

提前谢谢你

【问题讨论】:

  • 您是否在mix.exsapplication/0 中的mod 键中输入了正确的模块名称?
  • 换句话说,你应该发布你的mix.exs文件。

标签: erlang elixir elixir-mix gen-server


【解决方案1】:

此错误表明服务器未启动。您可以使用 GameOfLife.BoardServer.start_link 函数启动它。

简而言之,您应该使用 GenServer#start 或 GenServer#start_link 函数启动您的服务器。

GenServer docs

【讨论】:

  • 所以我必须在运行测试之前启动服务器?这与 Ruby 非常不同
  • 您的服务器是一个一直在运行的进程,您通过消息传递与它进行通信。与使用 OOP 时一样,您不能将消息传递给尚未实例化的类。
  • 所以我尝试运行 GameOfLife.BoardServer.start_game 并收到与运行测试时相同的错误
猜你喜欢
  • 2016-03-14
  • 2018-12-14
  • 2014-11-06
  • 2021-03-03
  • 2017-02-17
  • 2016-05-23
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多