2009-06-05 16 views
11

का उपयोग करते हुए मान लें कि मेरे पास एक रेल 2.3.2 एप्लिकेशन है जो nginx द्वारा सामने आया है और मैंग्रेल द्वारा परोसा जाता है जिसमें मुझे रेल के माध्यम से एक बड़ी स्थैतिक फ़ाइल की सेवा करने की आवश्यकता होती है (इसे एक्सेस करने के लिए)। मैं रेलवे ऐप को mongrel उदाहरण को अवरुद्ध करने से बचने के लिए फ़ाइल के हस्तांतरण को nginx पर भेजना चाहता हूं।रेल के माध्यम से Nginx के माध्यम से बड़ी फ़ाइलों की सेवा 2.3 x-sendfile

उपलब्ध जानकारी विरोधाभासी और अधूरा लगता है। This post दिखाता है कि अपाचे के साथ इसे कैसे किया जाए, और संकेत दें कि यह ngninx के साथ भी किया जा सकता है - लेकिन कोई उदाहरण नहीं। This post और this post दिखाएं कि प्लगइन का उपयोग करके इसे कैसे किया जाए, जाहिर है कि रेल 2.3 आवश्यक बनाता है। This post बताता है कि शायद xgin sendfile के लिए nginx के साथ समर्थन नहीं है।

मैं नहीं बल्कि बातें रेल के लिए प्लग इन के साथ चारों ओर गंदगी अब अपने आप में क्या कर सकते हैं नहीं चाहते हैं।

काम करने के लिए किसी को भी मिल गया एक्स Sendfile की तरह व्यवहार नहीं प्लगइन्स और रेल 2.3/nginx/संकर जाति का उपयोग कर गया है? यदि नहीं, तो प्लगइन (और/या बंदरगाह) और रेल 2.3/nginx/mongrel के साथ काम करने के लिए सबसे अच्छा प्रलेखन क्या है?

उत्तर

24

मुख्य विचार: अपने सभी नियंत्रक करता nginx x-accel-redirect हेडर स्थापित करने के लिए है। एक बार आपका कंट्रोलर विधि लौटाएगा (जो बहुत तेज़ होगा), nginx आपके रेल ऐप सेट हेडर को देखेगा। यदि एक्स-एक्सेल-रीडायरेक्ट सेट किया गया है, तो nginx स्थिर फ़ाइल परोसता है।

def show 
    @attachment = Attachment.find(params[:id]) 
    # Do anything else you need for authentication, etc. 

    head(:x_accel_redirect => '/files/' + @attachment.filename, 
    :content_type => @attachment.content_type, 
    :content_disposition => "attachment; filename=\"#{@attachment.filename}\"") 
end 

अकेले चाल से काम नहीं चलेगा:

आपका नियंत्रक की तरह कुछ दिखेगा। आपको $ RAILS_ROOT/फ़ाइलों पर स्थित फ़ाइलों के बारे में nginx को भी बताना होगा। सर्वर ब्लॉक के अंदर अपना nginx config के अंत करने के लिए इस जोड़ें:

location /files { 
    root /path/to/rails_app; 
    internal; 
} 

$ RAILS_ROOT/फाइलों में स्थिर फ़ाइल रखो और यह काम करना चाहिए। प्लगइन्स या बंदरपैचिंग की कोई ज़रूरत नहीं है रेल 2.3.2 और 2.3.14 के साथ परीक्षण किया गया।

+2

आप पुरुषों के बीच एक चैंपियन हैं, इसके लिए धन्यवाद। – hornairs

+1

साफ! सरल और सीधे बिंदु पर! –

+0

एक्स-एक्सेल पर Nginx संदर्भ: http://wiki.nginx.org/X-accel –

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

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