Tôi có một dự án kết hợp đơn giản nhất có thể với Giám sát và Máy chủ GenServer. Khi tôi gọi từ iex:Làm thế nào để chạy Giám sát Elixir theo số
EchoCmd.Supervisor.start_link([:Hello])
GenServer.call(:echoserver, :echo)
GenServer.call(:echoserver, :mumble)
GenServer.call(:echoserver, :echo)
: cuộc gọi nhảm sẽ đưa ra ngoại lệ, khi đó GenServer được khởi động lại và cuộc gọi thứ hai: echo hoạt động ok.
Nếu tôi chạy mã theo bất kỳ cách nào khác, Trình giám sát không khởi động được GenServer. Ví dụ, tôi tạo ra một escript của dự án với các module chính như sau:
defmodule EchoCmd.Echo do
def main(args) do
EchoCmd.Supervisor.start_link([:Hello])
GenServer.call(:echoserver, :echo)
GenServer.call(:echoserver, :mumble)
GenServer.call(:echoserver, :echo)
end
end
Các: gọi lí nhí đặt ra một ngoại lệ và escript chấm dứt mà không có sự giám sát khởi động lại GenServer.
Tôi không đưa mã giám sát và mô-đun máy chủ vì chúng hoạt động tốt khi được gọi từ iex, vì vậy tôi đoán chúng không cần thiết ở đây.
Tôi có hiểu lầm không? Điều này là không thể, hoặc tôi đang làm điều gì sai?
Ok, sau nhiều bumbling xung quanh và yak cạo râu, đây là vấn đề của tôi, cùng với không đủ: timer.sleeps. Tôi có thể làm với chế độ noobie để thêm chúng sau mọi thứ. Escript của tôi bị treo ra từ: lầm bầm nếu tôi sử dụng GenServer.start, nhưng nếu tôi sử dụng GenServer.start_link nó báo cáo lỗi và tiếp tục với một GenServer khởi động lại. Tôi hiểu nó nên làm việc theo cách khác xung quanh nhưng tôi sẽ đọc lên. Cảm ơn. –