2011-03-30 11 views
9

मेरे पास रूबी 1.9.2 पर रेल 3 चल रहे कुछ ऐप्स हैं और nginx + यात्री का उपयोग करते हुए उबंटू 10.04 एलटीएस मशीन पर तैनात हैं। अब, मुझे एक नया ऐप जोड़ने की ज़रूरत है जो रूबी 1.8.7 (आरईई) और रेल 2 पर चलती है। मैंने आरवीएम, पैसेंजर स्टैंडअलोन और रिवर्स प्रॉक्सी के साथ ऐसा करने के लिए पूरा किया।मैं पुनरारंभ करने के बाद भी यात्री स्टैंडअलोन को कैसे रख सकता हूं?

समस्या यह है कि, हर बार मुझे सर्वर को पुनरारंभ करना होगा (उदाहरण के लिए सुरक्षा अद्यतन स्थापित करने के लिए), मुझे यात्री स्टैंडअलोन मैन्युअल रूप से प्रारंभ करना होगा।

क्या इसे स्वचालित रूप से शुरू करने का कोई तरीका है? मुझे मोनीट या ईश्वर का उपयोग करने के लिए कहा गया था, लेकिन मैं यात्री स्टैंडअलोन के साथ काम करने वाली उचित नुस्खा लिखने में सक्षम नहीं था। मुझे भगवान और आरवीएम के साथ कुछ समस्याएं भी थीं, इसलिए यदि आपके पास कोई समाधान है जो भगवान का उपयोग नहीं करता है, या यदि आप जानते हैं कि भगवान/आरवीएम को सही तरीके से कैसे कॉन्फ़िगर करना है, तो यह भी बेहतर है।

उत्तर

15

यहां मैं काम कर रहा हूं। कल का नवाब (उबंटू 10.04) का उपयोग करना यात्री डेमॉन शुरू करने के लिए

मेरे पर्यावरण रूबी 1.9.2 और अपाचे के साथ rvm का उपयोग करता है और मेरे रेल एप्लिकेशन Capistrano

# Upstart: /etc/init/service_name.conf 
description "start passenger stand-alone" 
author "Me <[email protected]>" 

# Stanzas 
# 
# Stanzas control when and how a process is started and stopped 
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn 

# When to start the service 
start on started mysql 

# When to stop the service 
stop on runlevel [016] 

# Automatically restart process if crashed 
respawn 

# Essentially lets upstart know the process will detach itself to the background 
expect fork 

# Run before process 
pre-start script 
end script 

# Start the process 
script 
     cd /var/path/to/app/staging/current 
     sh HOME=/home/deploy /usr/local/rvm/gems/[email protected]/gems/passenger-3.0.7/bin/passenger start --user 'deploy' -p '5000' -a '127.0.0.1' -e 'production' 
end script 

और अपाचे config के माध्यम से तैनात किया जाता है:

<VirtualHost *:80> 
    ServerName myapp.com 

    PassengerEnabled off 

       <Proxy *> 
         Order deny,allow 
         Allow from all 
       </Proxy> 

    ProxyPass/http://127.0.0.1:5000/ 
    ProxyPassReverse/http://127.0.0.1:5000/ 

</VirtualHost> 

अपस्टार्ट ENV ['HOME'] सेट नहीं करता है जो यात्री निर्भर करता है, इसलिए हमें यात्री आदेश निष्पादित करते समय उसे पास करना होगा। इसके अलावा इसके बहुत सीधे आगे।

डिबगिंग के लिए एक नोट: https://serverfault.com/questions/114052/logging-a-daemons-output-with-upstart

आशा इस मदद करता है (स्क्रिप्ट ब्लॉक में दूसरी पंक्ति के >> /tmp/upstart.log 2>&1 की तरह कुछ संलग्न)।

+0

अच्छा। यही वह है जिसे मैं ढूंढ रहा था। –

0

मैं एक शेल स्क्रिप्ट लिखने का सुझाव दूंगा जो इसे सफलतापूर्वक शुरू कर सकता है, फिर यदि आप अभी भी उनका उपयोग करने के इच्छुक हैं, या यदि कोई इनसाइट स्क्रिप्ट नहीं है तो इसका उपयोग करें।

आप यह नहीं बताते कि आपका सर्वर किस ओएस चलाता है, लेकिन यदि यह हाल ही में उबंटू है, तो आप एक अपस्टार्ट स्क्रिप्ट को आसानी से लिख सकते हैं। यह अंतर्निर्मित है, और इसमें मॉनिट/ईश्वर की महत्वपूर्ण विशेषता है - अपने डिमन को फिर से शुरू करने के दौरान भी चलाना।

+0

उबंटू 10.04, सिर्फ इतना है कि जोड़ने के लिए सवाल का संपादन किया। –

-1

अपने प्लेटफ़ॉर्म के आधार पर, आपके पास निश्चित रूप से उपलब्ध कुछ प्रकार का उपलब्ध होगा। डेबियन पर, यह init.d है। Uubuntu, init.d या upstart पर। एक आरएचईएल की तरह, सेवा पर। ये आपको स्टार्टअप पर सेवाओं का प्रबंधन करने की अनुमति देगा। मैं आपके मंच के लिए उचित मैन पेज पढ़ने का सुझाव देता हूं।

+1

मैं मुख्य nginx स्टार्टअप करने के लिए init.d स्क्रिप्ट का उपयोग कर रहा हूं। यात्री स्टैंडअलोन एक और nginx उदाहरण पर चलाता है, यद्यपि। यात्रियों को स्टैंडअलोन शुरू करने के लिए, मुझे रुबी संस्करण को री ',' यात्री स्टार्ट 'चलाने के लिए बदलना होगा। मैं एक init.d स्क्रिप्ट कैसे लिख सकता हूं जो ऐसा करता है? –

0

मैं मणि आंख का उपयोग करें - https://github.com/kostya/eye

BUNDLE = 'bundle' 
RAILS_ENV = 'production' 
ROOT = File.expand_path(File.dirname(__FILE__)) 

Eye.config do 
    logger "#{ROOT}/log/eye.log" 
end 

Eye.application :app do 
    env 'RAILS_ENV' => RAILS_ENV 
    working_dir ROOT 
    trigger :flapping, :times => 10, :within => 1.minute 

    process :passenger do 
    daemonize true 
    pid_file "tmp/pids/passenger.pid" 

    start_command "#{BUNDLE} exec passenger start --port 3000 --environment #{RAILS_ENV}" 
    stop_signals [:TERM, 5.seconds, :KILL] 
    restart_command "kill -USR2 {PID}" 

    restart_grace 10.seconds 

    check :cpu, :every => 30, :below => 80, :times => 3 
    check :memory, :every => 30, :below => 70.megabytes, :times => [3,5] 
    end 

    process :delayed_job do 
    pid_file "tmp/pids/delayed_job.pid" 
    stdall "log/delayed_job.log" 
    daemonize true 
    stop_signals [:INT, 30.seconds, :TERM, 10.seconds, :KILL] 
    restart_grace 10.seconds 

    start_command "#{BUNDLE} exec rake jobs:work" 
    end 
end 
संबंधित मुद्दे