Es ist wirklich ziemlich einfach. Wenn gen_server
ausgeführt wird, enthält es einen Zustand, der zwischen Aufrufen übergeben wird (das letzte Argument an handle_call
, handle_cast
und handle_info
). Wenn dies ein Tupel mit zwei Elementen war {a, b}
und Sie eine Hot-Code-Aktualisierung mit release handler und sagen, der neue Code erwartet Tupel mit drei Elementen {a, b, c}
dann müssen Sie den Zustand konvertieren, bevor der neue Code den alten Zustand verwenden konnte.
Sie tun das mit code_change
. In Release Handling Instructions geben Sie die update
Anweisung an, und wenn Release Handler den Code auf dem Live-Knoten aktualisiert, ruft er die code_change
-Funktion auf, um den Status zu konvertieren. Während der Status konvertiert wird, werden die Prozesse angehalten und anschließend mit dem neuen Status fortgesetzt.
Sie müssen sich wahrscheinlich keine Gedanken darüber machen, wenn Sie Release Release Handler nicht verwenden, um Upgrades auf Live-Knoten zu veröffentlichen. Und selbst dann wird es nur verwendet, wenn das Statusformat geändert werden muss, was nicht oft ist.
Vermutlich Duplikat von [Code-Swapping in Erlangs gen_server] (http://stackoverflow.com/questions/1840717/achieving-code-swapping-in-erlangs-gen-server). –
Vielen Dank, ich habe resoled :) –