2016-07-20 10 views
5

Ich habe eine Elixier/OTP-Anwendung in Produktion, die mit mix phoenix.server gestartet wurde. Es hat mehrere Prozesse, die den Zustand halten. Einer davon ist ein Stash, implementiert als Agent, der momentan einen Status hat, den ich manuell ändern möchte, ohne die gesamte Anwendung zu stoppen. Sobald ich in einer iex Sitzung in der Anwendung bin, wird es trivial sein, aber ich weiß nicht, ob eine solche Option sogar in Elixier möglich ist?Anhängen einer iex-Sitzung an laufendes Elixier/OTP-Prozess

Antwort

11

Das hängt davon ab, wie Sie Ihre OTP-Anwendung gestartet haben. Um sich mit dem Knoten zu verbinden, muss er entweder mit --name oder --sname Flag gestartet werden. Sie können mit node()

$ iex 
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false] 

Interactive Elixir (1.3.0) - press Ctrl+C to exit (type h() ENTER for help) 
iex(1)> node() 
:[email protected] 

Der Knotenname der Name des aktuell laufenden Sitzung prüfen ein Atom ist, wo der erste Teil Name aktuellen Knoten ist und der zweite Teil ist Gastgeber. Der Host wird für das Routing verwendet. Daher ist es schwierig, eine Verbindung zu einem Knoten herzustellen, der unter nohost implementiert ist. Wenn Sie iex mit kurzem Namen starten (--sname), wird Ihr Hostname automatisch erkannt.

$ iex --sname foo --cookie ciastko 
(...) 
iex([email protected])1> node 
:"[email protected]" 

Auf einer anderen Konsole laufen iex mit anderen Namen und dem gleichen Cookie und versuchen Node.connect(:"[email protected]"). Sie sollten sich verbinden.

Sie haben wahrscheinlich Ihre Phönix-Anwendung damit nicht gestartet und können jetzt keine Verbindung herstellen. Um Phoenix beim nächsten Mal mit dieser Möglichkeit zu starten, müssen Sie Folgendes ausführen:

elixir --sname some_name --cookie ciastko -S mix phoenix.server