मैं अपने रेल ऐप की शुरुआत में स्वचालित रूप से पृष्ठभूमि थ्रेड लॉन्च करना चाहता हूं और इसे स्टॉप पर समाप्त करना चाहता हूं (देव मोड में Ctrl + C या उत्पादन में सिग्नल को मारना)

मुझे शुरुआत में अपना धागा लॉन्च करने में कोई समस्या नहीं है, लेकिन मैं इसे स्टॉप पर समाप्त करने का प्रबंधन नहीं कर सकता। या तो यह रुकता नहीं है, या तो यह मेरे रेल ऐप को छोड़ने से रोकता है।

क्या कोई स्वचालित तरीका है? या क्या मुझे रेल को हुक करना बंद कर देना चाहिए? कैसे ?

आपकी सलाह के लिए अग्रिम धन्यवाद।

पी.एस. वैसे, क्या आप रेल थ्रेड की "पिड" सुविधा का उपयोग करना जानते हैं? मेरा मतलब है कि शुरुआत में tmp/pids में एक छोटी टेक्स्ट फ़ाइल डालने और इसे स्वचालित रूप से हटाने का तरीका। मुझे यकीन है कि ऐसा करने के लिए कुछ कार्य हैं।

1
Offirmo 5 अप्रैल 2011, 02:21

2 जवाब

सबसे बढ़िया उत्तर

(पुराना प्रश्न, लेकिन मुझे अनुत्तरित प्रश्न पसंद नहीं हैं ;-)

ऐसा करने का एक सुविधाजनक तरीका "फाइनलाइज़र" को रेल "इनिशियलाइज़र" के समान सेट करना है। फिर आप इनिशियलाइज़र में थ्रेड लॉन्च कर सकते हैं और उन्हें फ़ाइनलाइज़र में बंद कर सकते हैं।

  1. "config/initializers" निर्देशिका के पास एक "कॉन्फ़िगर/फ़ाइनलाइज़र" निर्देशिका बनाएं।
  2. इस कोड को प्रारंभकर्ता में रखें:

(हम "बाहर निकलने पर" रूबी का उपयोग करते हैं, cf। रेल के लिए शटडाउन हुक)

at_exit do
   finalizer_files = File.join(::Rails.root.to_s, "config/finalizers/*.rb")
   Dir.glob(finalizer_files).sort.each do |finalizer_file|
      require finalizer_file
   end
end

3. फिर हम "फाइनलाइज़र" में कुछ इस तरह का उपयोग कर सकते हैं: (यहां हम "वर्कर्स" को इनिशियलाइज़र में लॉन्च करने का प्रयास करते हैं)

if Settings.web_app.engine.workers_count != 0 && Settings.web_app.engine.auto_manage_workers then
   puts '    * Automatic shutdown of workers'
   ...
end
2
Community 23 मई 2017, 13:29

क्या आपने शुरुआत में अपने ऐप को लपेटने की कोशिश की है..इस तरह सुनिश्चित करें:

begin
  thread = start_thread
  rest_of_app
ensure
  thread.kill
end
1
mckeed 5 अप्रैल 2011, 03:46
धन्यवाद, लेकिन मुझे अपने रेल ऐप को शुरुआत में लपेटने में बुरा लगता है .. अंत। इसके लिए अवश्य ही एक बेहतर तरीका होना चाहिए। '
 – 
Offirmo
5 अप्रैल 2011, 11:54