Ich kann eine App auf Elixir ausführen, aber wenn ein Fehler auftritt, existiert alles. Ich möchte nur, dass meine App in diesem Fall neu startet. Ich benutze Supervisor, weiß aber nicht, ob es funktioniert. Es folgt mein Code: -Starten einer App mit Supervisor in Elixir, die bei Fehler automatisch neu starten würde
mix.exs: -
def application do
[
applications: [:httpotion, :zookeeper, :parallel, :poison],
mod: {ServiceMonitor, []}
]
end
service_monitor.ex
defmodule ServiceMonitor do
use Application
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
worker(ServiceMonitor.Registry.setup, []),
]
supervise(children, strategy: :one_for_one)
end
end
registry.ex
defmodule ServiceMonitor.Registry do
def setup do
zk = get_zk
start(zk)
end
def start(zk) do
#main code
end
end
Jetzt leite ich meine App die Befehl: -
MIX_ENV=test mix run
Es läuft alles gut, bis ich einen Fehler in meinem Hauptcode erhalte. Anwendung existiert und startet nie neu. Error i receive ist: -
** (Mix) Could not start application service_monitor: exited in: ServiceMonitor.start(:normal, [])
** (EXIT) exited in: Task.await(%Task{owner: #PID<0.164.0>, pid: #PID<0.169.0>, ref: #Reference<0.0.2.1026>}, 3600000)
** (EXIT) an exception was raised:
** (MatchError) no match of right hand side value: {:error, :no_node}
(service_monitor) lib/service_monitor/registry.ex:121: anonymous fn/3 in ServiceMonitor.Registry.remove_available_if_not_registered/3
(elixir) lib/task/supervised.ex:89: Task.Supervised.do_apply/2
(elixir) lib/task/supervised.ex:40: Task.Supervised.reply/5
(stdlib) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Bitte helfen, wo ich falsch liege. Meine Anforderung ist, dass die App automatisch neu gestartet werden sollte, sobald ein Fehler auftritt.
Hat diese Arbeit: 'Arbeiter (Servicemonitor. Registrierung, [], Funktion:: Setup) '? Wenn nicht, können Sie bitte den Inhalt von 'ServiceMonitor.Registry.start/1' posten? – Dogbert
nein dies gibt auch den gleichen Fehler. Start-Funktion ist wie folgt: - 'def (zk) beginnen tun #Some Code Start (zk) end' Im Grunde ist es eine Endlosschleife –