6 Stimmen

Erlang: Wann soll `inets:start()` ausgeführt werden?

Was ist der geeignete Ort für die Durchführung inets:start() ?

  1. im Modul `Anwendungsname_Anwendung'?
  2. in applicationname_sup Supervisor-Modul?
  3. in einem untergeordneten Prozess, der an der Aufsichtsbehörde hängt?\
  4. irgendwo anders?

(Ich kämpfe immer noch mit inets:httpd )

Nota : Die Antwort kann nicht lauten: "Verwenden Sie eine Boot-Datei", bitte.

5voto

Zed Punkte 55390

Inets ist eine "eigenständige" Erlang-Anwendung; inets:start() ist nur ein Alias für application:start(inets) . Ich denke, die Antwort hängt stark davon ab, wie Sie Ihren Code pflegen.

Wenn Ihr Code als Paket mit Anmeldung sollte Ihre .app-Datei Folgendes enthalten inets die vor den Ihren gestartet werden müssen (siehe Tag "Anwendungen"). Starten Sie Ihre Anwendung mit application:start(my_app). sorgt nun dafür, dass auch inets gestartet wird. Folge: Wenn Sie eine Boot-Datei erstellen, wird diese auch inets für Sie starten :-P

Wenn Sie keine Anwendungen verwenden möchten, hängt die Wahl wohl davon ab, wie Ihr Code funktioniert. Wenn Sie inets immer brauchen, ist es besser, es von einem Ihrer Supervisoren starten zu lassen. Wenn es selten benötigt wird, können Sie immer sicherstellen, dass es mit etwas wie gestartet wird:

ensure_app_started(App) ->
  case application:started(App) of
    ok -> ok;
    {error, already_started} -> ok;
    Error -> Error
  end.

0voto

Flux Punkte 7535

Wenn Ihr Code als Paket mit Anmeldung , Liste inets in der Ressourcendatei der Anwendung:

% Filename: ebin/flamingo.app
{application, flamingo,
  [{vsn, "1.0.0"},
   {modules, [flamingo_app,
              flamingo_sup,
              flamingo]},
   {applications, [kernel,
                   stdlib,
                   inets]},
   {mod, {flamingo_app, []}}
  ]}.

Dann können Sie die Anwendung mit application:ensure_all_started(flamingo) . Dadurch wird sichergestellt, dass inets automatisch für Sie gestartet wird (d.h. es ist nicht notwendig, explizit inets:start() ).

Zum Beispiel (unter der Annahme, dass die *.app-Datei und die *.beam-Dateien und in ebin/ ):

$ erl -pa ebin/
Eshell V9.2  (abort with ^G)
1> application:ensure_all_started(flamingo).
{ok,[inets,flamingo]}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X