2009-04-07 10 views
6

ठीक है, इसलिए मैं खुद को पुनरारंभ करने के लिए रेल में एक क्रिया बनाना चाहता हूं। मैं एक छोटे से खोज किया था और पाया:रेल के भीतर से रेल को पुनरारंभ कैसे करें?

http://snippets.dzone.com/posts/show/5002

कौन सा 2 आदेशों पता चलता है, एक को रोकने के लिए और एक अन्य को पुनः आरंभ करने। निम्नलिखित मारता:

ps -a|grep "/usr/local/bin/ruby script/server"|grep -v "grep /usr"|cut -d " " -f1|xargs -n 1 kill -KILL $1 

-HUP संकेत मेरे लिए पुन: प्रारंभ नहीं होता है, तो मैं उपरोक्त आदेश वध करने की कोशिश की (समायोजित इतना आदेश कैसे मैं Ubuntu के तहत सर्वर शुरू हो गया था के साथ ठीक काम किया):

ps -eaf|grep "ruby script/server"|grep -v grep|cut -d " " -f3|xargs -n 1 kill -KILL $1;script/server 

यह मेरा वातावरण में ठीक काम करता है, तो मैं इसे निष्पादित करने के लिए एक कार्रवाई स्थापित करने का प्रयास:

def restart 
    fork { exec "ps -eaf|grep \"ruby script/server\"|grep -v grep|cut -d \" \" -f3|xargs -n 1 kill -KILL $1;script/server" } 
    redirect_to "/server_maintenance" 
end 

कार्रवाई सर्वर ठीक मारता है, लेकिन वास्तव में वापस यू सर्वर शुरू नहीं करता है पी:

=> Booting Mongrel 
=> Rails 2.3.2 application starting on http://0.0.0.0:3000 
=> Call with -d to detach 
=> Ctrl-C to shutdown server 
Exiting 
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/tcphack.rb:12:in `initialize_without_backlog': Address already in use - bind(2) (Errno::EADDRINUSE) 
    from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/tcphack.rb:12:in `initialize' 
    from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:93:in `new' 
    from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:93:in `initialize' 
    from /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.2/lib/action_controller/vendor/rack-1.0/rack/handler/mongrel.rb:10:in `new' 
    from /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.2/lib/action_controller/vendor/rack-1.0/rack/handler/mongrel.rb:10:in `run' 
    from /usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/commands/server.rb:111 
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 
    from script/server:3 

मुझे समझ में नहीं आ रहा है कि जब मैंगेल अभी निकल गया है तो पता क्यों पहले से उपयोग में है।

मैं इस सवाल पाया:

How do you restart Rails under Mongrel, without stopping and starting Mongrel

लेकिन संकेत, मेरे वातावरण में पुन: प्रारंभ करने का कारण नहीं वे सिर्फ प्रक्रिया की हत्या खत्म करो।

किसी के पास क्या काम हो सकता है पर कोई विचार है? मेरे पर्यावरण पर कुछ नोट्स के लिए: मैंने रूबीजम्स और मोंगेल के एक नए संस्करण से रेल स्थापित किए। मैं सर्वर शुरू करने के लिए स्क्रिप्ट/सर्वर का उपयोग करता हूं, जो निश्चित रूप से Mongrel का उपयोग करता है। मैं उबंटू हार्डी हेरॉन पर हूं।

उत्तर

3

ठीक है, मैं एक समाधान मिल जाने ... मैं बदल कैसे मैं करने के लिए रेल शुरू:

mongrel_rails start -d 

और अब निम्न कार्रवाई यह करना होगा:

def restart 
    fork { exec "mongrel_rails restart" } 
    redirect_to "/server_maintenance" 
end 

एक चेतावनी के रूप में, redirect_to होगा एक असफल लोड का कारण बनता है क्योंकि सर्वर डाउन हो जाएगा ... हालांकि एक विराम के बाद एक रीलोड दिखाएगा कि पुनरारंभ सफल रहा था। इसे AJAX के साथ पुनरारंभ करने के बाद, जावास्क्रिप्ट रीलोड के बाद पुन: प्रारंभ करने के द्वारा तय किया जा सकता है ... लेकिन मैं इसे पाठक के लिए एक अभ्यास के रूप में छोड़ दूंगा।

4

यदि आपको mod_rails पर स्विच करने में कोई फर्क नहीं पड़ता है, तो आप $ RAILS_ROOT/tmp/restart.txt बनाकर अपने सर्वर को पुनरारंभ कर सकते हैं, जिसके कारण केवल उस रेलवे इंस्टेंस का कारण बनता है जिसे आप पुनरारंभ करना चाहते हैं।

आपका पीएस कमांड दिखता है (कर्सररी नज़र) जैसे यह आपके बॉक्स पर सभी रेल प्रक्रियाओं को मार देगा। यह ठीक है अगर आप मशीन पर एकमात्र रेल ऐप हैं, लेकिन यदि कुछ उपयोगकर्ता एक ही उपयोगकर्ता के रूप में चल रहे हैं या आप रूट के रूप में चल रहे हैं तो आप उन्हें मार देंगे। बुरा रूप का!

This इसे मोंगल के लिए इंगित करता है। जिस तरह से आप कोशिश करना चाहते हैं।

+0

प्रतिक्रिया के लिए धन्यवाद! जवाब देने से पहले मुझे वास्तव में थोड़ा सा काम मिल गया, लेकिन लिंक बहुत ज्यादा दिखाता है कि मैं इसे कैसे काम कर रहा हूं, इसलिए उथल-पुथल होगा! –

0

रेलवे पर अपनी साइटें चलाने के स्टार्टअप के साथ हमारे परामर्श में, हमने मोंगल प्रक्रियाओं के प्रबंधन के लिए दो विधियों का उपयोग किया।

पहला, एक कस्टम मणि है जिसे हमने mongrel_runit कहा था। यह runit में सेवाओं के रूप में mongrels सेट करता है।

दूसरा, हमने god का उपयोग मोंगल प्रक्रियाओं की निगरानी के लिए किया था। यह mongrel_runit, या 'सामान्य' mongrel विन्यास के साथ काम करेगा।

+0

प्रतिक्रिया के लिए धन्यवाद! दुर्भाग्य से, यह मेरी व्यक्तिगत जरूरतों को पूरा नहीं करता है। इसके अलावा मैं सुझाव दूंगा कि आप यहां और प्रोजेक्ट पेज पर mongrel_runit के बारे में कुछ और जानकारी जोड़ें ... यह पूरी तरह स्पष्ट नहीं है कि यह क्या करता है। –

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