में एलीक्सिर सुपरवाइजर को कैसे चलाएं मेरे पास एक सुपरवाइजर और जेनसेवर जितना आसान हो सके मिश्रण मिश्रण है। जब मैं आईईएक्स से फोन:एस्क्रिप्ट
EchoCmd.Supervisor.start_link([:Hello])
GenServer.call(:echoserver, :echo)
GenServer.call(:echoserver, :mumble)
GenServer.call(:echoserver, :echo)
: बुदबुदाना कॉल एक अपवाद को जन्म देती है, तो GenServer पुन: प्रारंभ होने और दूसरा: कॉल ठीक काम करता है गूंज।
यदि मैं कोड को किसी अन्य तरीके से चलाता हूं तो सुपरवाइजर जेनसेवर को पुनरारंभ करने में विफल रहता है। उदाहरण के लिए, मैं इस प्रकार मुख्य मॉड्यूल के साथ परियोजना का एक escript बनाएँ:
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
: बुदबुदाना कॉल एक अपवाद को जन्म देती है और escript पर्यवेक्षक GenServer को पुन: प्रारंभ बिना समाप्त हो जाता है।
मैंने सुपरवाइजर और सर्वर मॉड्यूल कोड शामिल नहीं किया है क्योंकि वे आईईएक्स से कॉल करते समय ठीक काम करते हैं, इसलिए मुझे लगता है कि उन्हें यहां आवश्यकता नहीं है।
क्या मेरे पास एक वैचारिक गलतफहमी है? क्या यह संभव नहीं है, या मैं कुछ गलत कर रहा हूँ?
ठीक है, बहुत घूमने और याक शेविंग के बाद, यह मेरी समस्या थी, अपर्याप्त के साथ: timer.sleeps। मैं एक नोबी मोड के साथ कर सकता था जो उन्हें सब कुछ के बाद जोड़ता है। मेरी एस्क्रिप्ट क्रैश हो जाती है: अगर मैं GenServer.start का उपयोग करता हूं तो गड़बड़ हो जाता है, लेकिन अगर मैं GenServer.start_link का उपयोग करता हूं तो यह त्रुटि की रिपोर्ट करता है और पुनरारंभ किए गए जेनसेवर के साथ चलता है। मुझे समझ में आया कि इसे दूसरी तरफ काम करना चाहिए लेकिन मैं पढ़ूंगा। धन्यवाद। –