2012-10-23 26 views
12

के साथ रूबी रैक ऐप को कैसे तैनात करें मैं एनजीआईएनएक्स के साथ एक साधारण रूबी रैक सेवा को तैनात करना चाहता हूं। मैंने इंटरनेट पर विभिन्न चीजें पढ़ीं, जिनमें से कोई भी पर्याप्त सहायक नहीं था।एनजीआईएनएक्स

require 'rack' 

class HelloWorld 
    def call(env) 
    [200, {"Content-Type" => "text/plain"}, ["Hello world!"]] 
    end 
end 

Rack::Handler::Mongrel.run HelloWorld, Port: 9292 

मैं पता है कि सबसे अच्छा तरीका है nginx के साथ इस तैनात करने के लिए किया जाएगा चाहते हैं: मैं इस (वास्तव में यह थोड़ा और अधिक जटिल है लेकिन अभी भी < 200 कोड सेवा की तर्ज है) है का कहना है कि देता है। शायद एफसीजीआई या कुछ और?

उत्तर

15

यहाँ मामले के लिए एक बुनियादी nginx config आप के साथ जा रहे हैं unicorn/thin समाधान:

upstream rack_upstream { 
    server 127.0.0.1:9292; 
} 

server { 
    listen  80; 
    server_name domain.tld; 
    charset UTF-8; 

    location/{ 

    proxy_pass http://rack_upstream; 
    proxy_redirect  off; 
    proxy_set_header Host    $host; 
    proxy_set_header X-Real-IP  $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 

    location ~* ^.+\.(jpg|jpeg|gif|png|css|js)$ { 
    root /path/to/static/files; 
    } 
} 

अगर आप रूट के रूप में चलाने के nginx आप बंदरगाह पर अपनी साइट की सेवा कर सकते करेंगे 80

अन्यथा listen SOME-AVAILABLE-PORT

करने के लिए listen 80 बदलने अपनी साइट का नाम

साथ domain.tld की जगह

भी आप | करके फ़ाइलें (jpg|jpeg|gif|png|css|js) regex में nginx द्वारा कार्य किया जा रहा है, उन्हें परिसीमन के एक्सटेंशन जोड़ सकते हैं

पर अधिक देखें:

http://wiki.nginx.org/DirectiveIndex

http://wiki.nginx.org/ServerBlockExample

http://wiki.nginx.org/FullExample

9

सबसे आसान बात शायद passenger है जो nginx को किसी भी रैक आधारित ऐप (अन्य चीजों के साथ) सेवा करने की अनुमति देती है। यह सेटअप करना बहुत आसान है, लेकिन चूंकि nginx में लोड करने योग्य मॉड्यूल नहीं हैं, इसलिए आपको स्रोत से nginx इंस्टॉल करना होगा (इंस्टॉलर यह सब आपके लिए संभालता है)।

एक और लोकप्रिय तरीका है कि यूनिकॉर्न के लिए nginx प्रॉक्सी होना है। यूनिकॉर्न एक रूबी वेबसर्वर है जो किसी भी रैक ऐप को होस्ट कर सकता है। आम तौर पर आप nginx स्थिर संपत्ति को संभालने देते हैं और बाकी को यूनिकॉर्न भेजते हैं। यूनिकॉर्न में पतली, मोन्गेल इत्यादि की तुलना में कुछ अच्छी विशेषताएं हैं, उदाहरण के लिए यह बॉक्स के बाहर बहुत सी सीमलेस रीस्टार्ट को संभालती है।

1

प्रीकंपिल्ड यात्री बाइनरी का उपयोग करते समय nginx + यात्री को तैनात करना बहुत आसान है (for Debian/Ubuntu)।

/var/www/my_app: 
    \-- public/ <- public root of webserver 
    \-- config.ru <- that's where you place hello world 
    \-- tmp 
     \-- restart.txt 

nginx config (शायद /etc/nginx/sites-available/my_site में जैसे):: यह अपनी परियोजना की निर्देशिका संरचना निम्नलिखित जरूरी है

server { 
    listen 80; 
    server_name example.com; 
    root /var/www/my_app/public; 

    passenger_enabled on; 
    passenger_ruby /usr/bin/ruby;  
} 

आप अपने आवेदन को पुनः आरंभ करना चाहते हैं, बस चलाने

touch /var/www/my_app/tmp/restart.txt 

डेबियन पर अपनी साइट को सक्षम करने के लिए, एक सिम्लिक

बनाएं

और फिर से लोड nginx /etc/init.d/nginx reload

+0

मैं कैसे को निष्क्रिय डिफ़ॉल्ट सर्वर "my_site" का उपयोग करने हैं? – Vikaton

+0

बस कॉन्फ़िगरेशन फ़ाइल को हटाएं: 'rm/etc/nginx/sites-enable/my_site' और nginx पुनः लोड करें:'/etc/init.d/nginx/reload'। – Tombart

+0

जो मैं उपयोग करना चाहता हूं उसे हटाने के लिए, मैं DEFAULT कॉन्फ़िगरेशन – Vikaton