2012-05-28 15 views
7

में बुरा फ़ाइल डिस्क्रिप्टर पर मैक ओएस एक्स शेर रूबी v1.8.7 और डेमॉन v1.1.8 का उपयोग करना, मैं एक उपभोक्ता प्रक्रिया लिख ​​सकते हैं और यह एक Dameon रूप में चलाने के प्राप्त करने का प्रयास कर रहा हूँ यह शुरू नहीं करता है और बदले में एक लंबे ट्रैस बैक, जो कुछ इस तरह चला जाता है फेंकता है:रूबी डेमॉन

 
E, [2012-05-28T19:34:16.199770 #29357] ERROR -- : Bad file descriptor (Errno::EBADF) 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:134:in `for_fd' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:134:in `close_io' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:134:in `initialize' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:134:in `new' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:134:in `close_io' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:75:in `call_as_daemon' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/application.rb:258:in `start_proc' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/application.rb:295:in `start' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:51:in `watch' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:51:in `fork' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:51:in `watch' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:45:in `each' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:45:in `watch' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:44:in `loop' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:44:in `watch' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:84:in `start_with_pidfile' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:64:in `fork' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:64:in `start_with_pidfile' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:111:in `start' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/application_group.rb:149:in `create_monitor' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/application.rb:284:in `start' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/controller.rb:70:in `run' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons.rb:197:in `run_proc' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/cmdline.rb:109:in `call' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/cmdline.rb:109:in `catch_exceptions' 
/opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons.rb:196:in `run_proc' 
users/delete_consumer.rb:40 

मुझे यकीन है कि क्या इस मुद्दे खड़ी कर रहा है नहीं कर रहा हूँ? निर्देशिका का नाम, लॉग फ़ाइल नाम सभी मान्य हैं। मैं इन कॉन्फ़िगरेशन के साथ MyConsumer का एक उदाहरण बनाने में सक्षम हूं और एक स्टैंडअलोन प्रोग्राम/कंसोल से अपने # सदस्यता रद्द करने में सक्षम हूं।

+3

तो, रुबी डेमन्स के साथ कुछ अनुभव प्राप्त करने के बाद, मुझे एहसास हुआ है कि ऐसी कोई त्रुटि यह दर्शाती है कि अंतर्निहित ब्लॉक (जो राक्षसी है) में त्रुटियां हैं। अंतर्निहित ब्लॉक में सभी त्रुटियों को ठीक करने से यह त्रुटि भी ठीक हो जाती है। –

+0

मुझे एक ही समस्या थी। अपने निष्कर्ष साझा करने के लिए धन्यवाद! – vpsz

+2

दूसरों की मदद करने के लिए, अपने स्वयं के प्रश्न का उत्तर दें, ताकि इसका औपचारिक उत्तर हो। –

उत्तर

3

रूबी डेमॉन के साथ अपने अनुभवों को आधार पर, मैंने पाया ऐसी त्रुटियों संकेत मिलता है कि कि अंतर्निहित ब्लॉक (जो daemonized जाता है) में त्रुटियां हैं। उन त्रुटियों को ठीक करने से यह त्रुटि भी ठीक हो जाती है।

+0

से हटा दिया गया था, मेरे मामले में, समस्या यह थी कि लाइब्रेरी जिसे मैं डिमोनाइज्ड लूप में बुला रहा था, डिफ़ॉल्ट रूप से stdout को लिखा था, इसके अलावा मैंने इसे स्पष्ट रूप से करने के लिए कहा था। लेकिन एक डिमन के पास कोई स्टडआउट नहीं है! इस प्रकार, यह खराब फ़ाइल वर्णनकर्ता अपवाद उठाया। –

0

आपके पास आपके उदाहरण में टाइपो हैं जो त्रुटि उत्पन्न कर सकती हैं। MyConsumer के लिए वर्तनी की जाँच करें, जो आप रों स्थानांतरित और n ...

consumer = MyCosnumer.new(config) 
+0

के साथ वितरित किए गए पुराने 1.8.7 बनाम टाइपो को इंगित करने के लिए धन्यवाद। जब मैं प्रश्न पोस्ट कर रहा था तो यह यहां पहुंचा होगा। इसे संपादित और –

संबंधित मुद्दे