2017-02-23 39 views
0

Я новичок в Elixir, и мне очень сложно отслеживать проблемы, когда сборка решает не строить.Получение странной ошибки супервизора на github repo

Так что я пытаюсь использовать этот repo на основе этого tutorial

Один из вопросов, которые я имею, что я постоянно получаю эту проблему:

** (Mix) Could not start application reph: Reph.start(:normal, []) returned an error: shutdown: failed to start child: Reph.ReactIO 
    ** (EXIT) an exception was raised: 
     ** (ArgumentError) expected :name option to be one of: 

    * nil 
    * atom 
    * {:global, term} 
    * {:via, module, term} 

Got: {:local, Reph.ReactIO} 

      (elixir) lib/supervisor.ex:332: Supervisor.start_link/3 
      (stdlib) supervisor.erl:365: :supervisor.do_start_child/2 
      (stdlib) supervisor.erl:348: :supervisor.start_children/3 
      (stdlib) supervisor.erl:314: :supervisor.init_children/2 
      (stdlib) gen_server.erl:328: :gen_server.init_it/6 
      (stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3 

Так что я некоторые расследуя в elixir codebase, чтобы узнать, что это за аргумент. Он смотрит на меня как StdJsonIo все равно должны правильно компилировать с

{atom, opts} when is_atom(atom) -> 
    :gen.start(:gen_server, link, {:local, atom}, module, args, opts) 

Snippet в супервизора, как я передаю атом: местный с последующим модулем. Вот фрагмент кода, который, по-видимому, он висит.

def start_link(opts \\ []) do 
    Supervisor.start_link(__MODULE__, :ok, name: {:local, __MODULE__}) 
end 

Если я удалить: локальная, кажется, работает, но у меня есть две проблемы, одна это код, кажется, ошибка полностью с другой проблемой, другой. Теперь у меня есть зависимость, которую я не могу просто потянуть с deps.get и запустить. Я должен добавить его отдельно, что может быть в порядке. Но я действительно хотел бы знать, почему это нарушает приложение.

ответ

3

Как вы могли видеть в исходном коде, Supervisor.start_link/3 ожидает, что значения параметров будут одним из тех, что вы получили в описательном сообщении об ошибке.

При этом name не может иметь значение {:local, __MODULE__}. Вы можете пойти с name: __MODULE__, которая достаточна во многих случаях, или вы могли бы пройти любой atom там вместо __MODULE__ (который составляется в настоящее время компиляции имя модуля.)

Что вы имели в виду как «Эликсир кодовую» является метод do_start, что, по-видимому, не то, что вы вызываете. Если вы хотите позвонить do_start, запустите свой GenServer с GenServer.start/3, который предназначен для запуска серверов за пределами дерева наблюдения.

+0

Спасибо тонну! Я искал не тот файл. Я очень благодарен за большое спасибо. –

+0

Каждый иногда смотрит на неправильные файлы :) Добро пожаловать. – mudasobwa

+0

Uff :) Я искал решение, основанное на вашем объяснении. Но я не мог найти. Может ли кто-нибудь из вас предоставить рабочий пример, пожалуйста? :) большое спасибо! – radosch

 Смежные вопросы

  • Нет связанных вопросов^_^