2011-12-12 11 views
10

यूनिकॉर्न के लिए मेरी इनिट स्क्रिप्ट का लिंक निम्नलिखित है। https://gist.github.com/1466775यूनिकॉर्न रीस्टार्ट/अपग्रेड काम नहीं करता

पुनरारंभ आदेश ने मेरे लिए कभी काम नहीं किया है। मैं प्रत्येक तैनाती के बाद यूनिकर्न को पुनरारंभ करने के लिए अपग्रेड का उपयोग कर रहा हूं। लेकिन जब भी नए रत्न जोड़े जाते हैं तो बड़े बदलाव होते हैं, अपग्रेड काम नहीं करेगा। हाल ही में, मैंने हॉपटैड मणि को एयरब्रैक के साथ बदल दिया और यह 'अनियंत्रित निरंतर एयरब्रैक (नेमइरर)' कहने में त्रुटियां। लेकिन जब मैंने रोका और यूनिकर्न फिर से शुरू किया, तो यह ठीक काम किया। क्या समस्या init स्क्रिप्ट या इसकी अलग समस्या में निहित है?

धन्यवाद।

उत्तर

11

अपने init स्क्रिप्ट के अनुसार, "/bin/init.d/unicorn पुनः आरंभ" HUP संकेत गेंडा मास्टर प्रक्रिया के लिए भेजता है

------ काटी

restart|reload) 
    sig HUP && echo reloaded OK && exit 0 
    echo >&2 "Couldn't reload, starting '$CMD' instead" 
    su - $USER -c "$CMD" 

---- -cropped

यह HUP गेंडा की प्रक्रिया के लिए क्या करता है यह है:

पुनः लोड कॉन्फ़िग फ़ाइल और शान से सभी कर्मचारियों को पुनरारंभ करें। यदि "preload_app" निर्देश गलत है (डिफ़ॉल्ट), तो पुनरारंभ होने पर कर्मचारी भी कोई भी एप्लिकेशन कोड परिवर्तन उठाएंगे। यदि "preload_app" सत्य है, तो अनुप्रयोग कोड परिवर्तनों का कोई प्रभाव नहीं पड़ेगा।

जो आप खोज रहे हैं वह यूएसआर 2 सिग्नल है जो यूनिकॉर्न में आपका अपग्रेड पैरामीटर पहले से ही कर रहा है!

यूएसआर 2 सिग्नल चलने वाली बाइनरी को फिर से निष्पादित करता है। बच्चे को उठने और चलाने के बाद सत्यापित होने पर मूल प्रक्रिया में एक अलग QUIT भेजा जाना चाहिए।

+0

से प्रेरणा लेना हालांकि यह सही है, हम यह नहीं बता सकते कि आपकी समस्या यूनिकॉर्न कॉन्फ़िगरेशन को देखे बिना क्या है। असल में, अगर यह कहीं भी 'preload_app' सेट करता है, तो आपको "अपग्रेड" कमांड का उपयोग करना होगा और इसे काम करने के लिए आपको अपने यूनिकॉर्न कॉन्फ़िगरेशन में अतिरिक्त कोड होना होगा। Google "यूनिकॉर्न शून्य डाउनटाइम परिनियोजन" उदाहरण लाएगा। यदि आप ** 'preload_app' सेट नहीं करते हैं, तो आपका 'पुनरारंभ' सही विकल्प होगा, लेकिन यह सर्वर को पूरी तरह से पुनरारंभ करेगा, जिससे यह एक पल के लिए ऑफलाइन हो जाएगा। – averell

10

मैं एक बहुत ही इसी तरह की समस्या थी और अंत में found the solution

मैं लॉग के माध्यम से देखा था पहले लेकिन स्पष्ट रूप से (Bundler::GemfileNotFound) त्रुटि को देखने में असफल। बाहर निकलता है पुराने रिलीज के पुराने संदर्भ हैं और एक बार मणि फ़ाइल बदल जाती है, तो नया मास्टर चुपचाप विफल रहता है। क्या होता है यह देखने के लिए अपने यूनिकॉर्न लॉग की पूंछ करें। मेरे मुद्दों सब मेरी unicorn.rb

before_exec do |server| 
    ENV['BUNDLE_GEMFILE'] = "#{root}/Gemfile" 
end 
+3

[यह] (https://github.com/sosedoff/capistrano-unicorn/commit/c1e7a3f2794dd070367d0808ad102a6d20d39cf2) थोड़ा बेहतर समाधान हो सकता है। – Anjan

+0

@anjan हाँ, अच्छा लगता है। मैं फिलहाल कैपिस्ट्रानो-यूनिकॉर्न मणि का उपयोग नहीं कर रहा हूं लेकिन यह उन लोगों के लिए एक अच्छा तय होगा। – toxaq

2

मैं एक ही मुद्दा था में निम्नलिखित के साथ लिंक के अनुसार तय किया गया है, लेकिन मैं rbenv जो उपयोगकर्ता के आधार प्रति पर स्थापित किया गया था का उपयोग कर रहा था।

CMD="cd $APP_ROOT; ~/.rbenv/bin/rbenv exec bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" 

आशा है कि यह तुम्हारी मदद करेगा:

CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" 
इस के साथ

: मैं इस init script

मैं पता लगा है कि मैं थोड़ा इस बदलने की जरूरत है के बाद से मेरी rbenv प्रति उपयोगकर्ता के आधार पर स्थापित इस्तेमाल किया !

पीएस या किसी और के बाद से यह एक पुराना सवाल है =)

0

मैंने अपने यूनिकॉर्न इनिट को बदलकर इस मुद्दे को ठीक किया।घ स्क्रिप्ट से

CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E staging" 

यह करने के लिए:

CMD="cd $APP_ROOT; BUNDLE_GEMFILE=$APP_ROOT/Gemfile bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E staging" 

कौन सा हर नई रिलीज पर नया बंडल gemfile को इंगित करने लगता है। this merge request

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