2012-08-23 8 views
9

मैं अपने रेल अनुप्रयोग के साथ ई टीसीपी सर्वर शुरू करने के लिए EventMachine और Monetarily का उपयोग कर रहा हूं। यह config/initializers/momentarily.rb से शुरू किया गया है।पता लगाएं कि एप्लिकेशन HTTP सर्वर के रूप में शुरू किया गया था या नहीं (रेक कार्य, rconsole आदि)

मेरी समस्या यह है कि जब मैं रेक कार्यों को चलाता हूं, तो db:migrate भी शुरू होता है। मैं केवल तब शुरू करना चाहता हूं जब मैं HTTP सर्वर शुरू करता हूं। वातावरण मदद नहीं करेगा, क्योंकि दोनों सर्वर प्रारंभ और रेक कार्य विकास पर्यावरण के अधीन हैं। क्या यह जानने का कोई तरीका है कि एप्लिकेशन HTTP सर्वर को किसी और चीज के विपरीत चला रहा है? ध्यान दें कि न केवल रेक कार्य है, यदि मैं रेल कंसोल चलाता हूं तो ईएम भी शुरू होता है, जो कि मेरे मामले के लिए कुछ वांछनीय नहीं है।

उत्तर

6

ऐसा करने का एक शानदार तरीका नहीं है जिसे मैं जानता हूं। आप यात्री के लिए newrelic के दृष्टिकोण (जाँच local_environment.rb में discover_dispatcher) जो मूल रूप से अगर यह यात्री, पतली अंदर चल रहा है पता लगाने के लिए इस्तेमाल किया heuristics की एक सूची है, आदि

नकल कर सकता है यह जाँच करता है

defined?(::PhusionPassenger) 

के लिए पतली यह

if defined?(::Thin) && defined?(::Thin::Server) 
+0

यह वास्तव में वादा करता है। धन्यवाद! –

+0

ऐसा लगता है कि यात्री के साथ रेल 4 में मेरे लिए काम नहीं कर रहा है। –

+0

जांच करने के लिए निरंतर प्रतीत होता है :: PhusionPassenger अब –

0

शायद आप ARGV पर आधारित प्रारंभकर्ता में एक स्विच लागू कर सकते हैं?

कुछ की तरह:

if ARGV.join(' ').match /something/ 
    # your initializer code here 
end 
+0

यह, उत्पादन में भी काम करने के लिए होता है जब अपाचे –

0

एक प्रारंभकर्ता से कि अन्य सर्वर प्रारंभ न करें। daemonscript/momentarily में बनाएं और इसे अपने ऐप के भीतर से शुरू करें।

+0

के तहत चल मैं अभी भी पता करने के लिए जब डेमॉन और जब नहीं –

0

आपके एप्लिकेशन लॉन्च होने के बाद, आप इसे ps जांचने के लिए खोल सकते हैं। यदि ps दिखाता है कि HTTP सर्वर चल रहा है और चल रहे HTTP सर्वर के पास आपके एप्लिकेशन के समान पिन है ($$ का निरीक्षण करके पिड की जांच करें), तो आप टीसीपी सर्वर लॉन्च कर सकते हैं।

+0

लेकिन इस इच्छा शुरू करने के लिए की आवश्यकता होगी जब मैं 'रेल सर्वर' चलाता हूं तो काम नहीं करता। –

+0

हां यह होगा। जब आप रेल सर्वर 'ps aux | चलाते हैं grep rails' में 'रीमस 18454 0.0 0.8 2515572 65968 s000 S + 11:10 AM 0: 01.51 /Users/remus/.rvm/rubies/ruby-1.9.3-p125/bin/ruby स्क्रिप्ट/रेल सर्वर' –

6
unless File.basename($0) == "rake" && ARGV.include?("db:migrate") 
    # you are not in rake db:migrate 
end 
+0

जैसे कुछ शामिल होंगे गंदे से साफ धन्यवाद! –

3

config.ru फ़ाइल में एक वातावरण चर सेट की जाँच करता है, और कोड में कहीं भी इसका इस्तेमाल करता है, तो यह केवल एक rails server आदेश का उपयोग कर मार डाला है पता लगाने के लिए।

उदा।

  • फ़ाइल:config.ru

    ENV['server_mode'] = '1' 
    

और यह कहीं का उपयोग कर के रूप में:

  • फ़ाइल:config/environment.rb

    Thread.new { infinite_loop! }.join if ENV['server_mode'] = '1' 
    

संदर्भ: Answer

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