2012-01-02 17 views
5

ठीक है, मैं अपना पहला रूबी ऐप बना रहा हूं। जो कुछ भी 'उत्पादन' पर ले जा रहा है उसे जटिल लग रहा है। अब तक मैंने यात्री को कॉन्फ़िगर करने, इसे स्टार्टअप पर चलाने के लिए, फिर स्टार्टअप पर चलाने के लिए रेडिस प्राप्त करने के माध्यम से अपना रास्ता संघर्ष किया है।मैं बूटअप पर स्वचालित रूप से एक resque कार्यकर्ता कैसे बना सकता हूं?

मेरा अंतिम कार्य 1 कार्यकर्ता जोड़ने के लिए स्टार्टअप पर है। अभी, मुझे अपने रेक आदेश rake workers:start में ssh करना और चलाने के लिए है। जाहिर है जब मैं एसएसएच बंद करना चाहता हूं तो यह अच्छा नहीं है .. इसलिए मैं वास्तव में नहीं जानता कि अगला कदम कैसा है या नहीं।

मैंने config.ru पर resque डिफ़ॉल्ट कॉन्फ़िगरेशन की प्रतिलिपि बनाने का प्रयास किया और यह सिर्फ त्रुटियों के साथ यात्री को उड़ाता है। मैंने रेस्क-पूल में भी देखा जो कुछ लोगों ने उल्लेख किया लेकिन यह मेरे सिर पर है।

मुझे बस बूटअप पर 1 कार्यकर्ता जोड़ना है। यह इस बात पर इतना आसान नहीं होगा कि इस ऐप का इतना आसान होगा।

+0

वैसे, क्या आप रेल का उपयोग करते हैं? या कुछ अन्य ढांचे? –

+0

सिनात्रा। क्षमा करें, उल्लेख किया जाना चाहिए कि – Tallboy

+0

मैं समझता हूं कि आप क्या महसूस करते हैं।मैं भी अभिभूत था :-) –

उत्तर

4

उत्पादन में आपको अपनी प्रक्रियाओं को देखने के लिए god का उपयोग करना चाहिए। यहां तक ​​कि यदि यह प्रोजेक्ट एक छोटा सा है, तो भी मैं दृढ़ता से अपना समय निवेश करने और इसे स्थापित करने की सलाह देता हूं।

एक और बड़ा एकCapistrano है।

तो, यदि आप ईश्वर का उपयोग कर रहे थे, तो यहां एक config file है जो आपकी मदद करेगा।

आप /etc/init.d/ या /etc/init/ या अन्य में उचित स्क्रिप्ट का उपयोग करके, सिस्टम स्टार्टअप पर rake resque:work शेड्यूल करने का भी प्रयास कर सकते हैं (आप किस सिस्टम का उपयोग करते हैं) पर निर्भर करता है। मैंने कुछ समय पहले यह कोशिश की और मैंने छोड़ दिया (क्यों याद नहीं है)।

मैं समझता हूं कि यह मेरा जवाब बिल्कुल सही नहीं है जिसे आप अभी ढूंढ रहे हैं। लेकिन इसकी कल्पना करें: अगर सबकुछ स्थापित हो गया है, तो अगले संस्करण को तैनात करना आपके विकास मशीन पर rake deploy चलाने जितना आसान है। और यह आपके कोड को भंडार से खींचने, माइग्रेशन चलाने, श्रमिकों और वेबसर्वर को पुनरारंभ करने और क्या नहीं करने का ख्याल रखेगा।

+1

मुझे पता है कि यह वह उत्तर नहीं है जिसे आप उम्मीद कर रहे थे लेकिन मैं इसे 'उचित' स्टार्टअप स्क्रिप्ट के साथ कैसे कर सकता हूं। मैं वादा करता हूं कि बीमार भगवान और कैपिस्ट्रानो में अधिक दिखता है लेकिन मैं बस इसे पहले काम करना चाहता हूं। मैं सेंटोस का उपयोग कर रहा हूँ। – Tallboy

+0

हम्म, मैं अपने सर्वर पर उबंटू का उपयोग कर रहा हूं। क्षमा करें, सेंटो के बारे में पता नहीं है। –

+0

उन लोगों के लिए जो विश्वास करते हैं कि ईश्वर पूजा करने वाला है, और कुछ उपयोग करने के लिए नहीं, यह एक अस्वीकार्य समाधान है। एक बेहतर विकल्प monit होगा। – sockmonk

6

मैं भगवान मणि का उपयोग नहीं करता क्योंकि (1) मैंने एक ऐसी परियोजना देखी है जो इसे स्थापित किए गए सेटअप की जटिलता से बहुत प्रभावित हुई है, और (2) मैं व्यक्तिगत रूप से मानक लिनक्स (उबंटू)) उपकरण जो इस तरह की चीज को संभालते हैं।

बूटअप

मैं अपने /etc/rc.local फ़ाइल में इस कोड है पर Resque कार्यकर्ताओं शुरू करने के लिए। उन लिपियों में मैं गहरे लाल रंग का वातावरण की स्थापना की,

# Start Resque 
su -l deploy -c "/home/deploy/start-resque-workers" 
su -l deploy -c "/home/deploy/start-resque-webui" 

तब और रेक कार्य चलाएँ:: मैं सिस्टम पर एक तैनाती उपयोगकर्ता है

# Load RVM into a shell session *as a function* 
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then 
    # First try to load from a user install 
    source "$HOME/.rvm/scripts/rvm" 
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then 
    # Then try to load from a root install 
    source "/usr/local/rvm/scripts/rvm" 
else 
    printf "ERROR: An RVM installation was not found.\n" 
fi 

# Use rvm to switch to the default ruby. 
rvm use default 

# Now launch the app 
cd /home/deploy/app-name-here/current 
nohup rake QUEUE=* RAILS_ENV=production environment resque:work & 

मैं इस तरह का प्रयोग कर रहे वर्षों के लिए स्थापित, और यह ठोस है। सर्वर क्रैश नहीं होते हैं। मुझे इन अन्य सर्वरों को देखने के लिए अभी तक एक और सिस्टम (जैसे भगवान मणि) स्थापित करने के ऊपरी हिस्से की आवश्यकता नहीं है।

इसके अतिरिक्त, मैं तैनात कर्मचारियों को पुनरारंभ करने के लिए एक कैपिस्ट्रानो मणि का उपयोग करता हूं।

+0

अरे, मैंने देखा है कि आपने लगभग 4 साल पहले इसका जवाब दिया था, लेकिन ... क्या आपको रिस्क श्रमिकों को साफ़ करने का कोई तरीका होगा ... पीएस कुल्हाड़ी का उपयोग करके और पिड को मारने से प्रक्रिया को मार दिया जाता है, लेकिन फिर भी उन्हें पंजीकृत रखता है। – jdkealy

+0

हम्म ... मुझे खेद है, मैं नहीं करता। यहां मेरी रेज स्क्रिप्ट हैं, यदि कोई मदद है: https://github.com/asm-products/think-200/tree/master/script – Dogweather

+0

हे मेरे पास वापस आने के लिए धन्यवाद! मैंने अभी कल इसे कार्यान्वित किया है: https://gist.github.com/jdkealy/a7f817bbb8e568ff38bb मैं सर्वर को मारने के बारे में चिंतित था, जबकि बचाव कार्यकर्ता एक कार्य में व्यस्त थे और एक बैश स्क्रिप्ट में एक सिम्लिंक जोड़ते थे जो एक रेक कार्य निष्पादित करता था /etc/rc0.d/ श्रमिकों को कृपापूर्वक छोड़ने लगता है! – jdkealy