2011-08-05 27 views
14

मेरे सेटअप: रेल 3.0.9, रूबी 1.9.2रेल 3 मिडलवेयर संशोधित अनुरोध हेडर

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

my_middleware.rb 

class MyMiddleware 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    @status, @headers, @response = @app.call(env) 
    [@status, @headers, @response] 
    end 
end 

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

application.rb 

config.middleware.insert_before Rack::Lock, "MyMiddleware" 

उत्तर

16

अपने call विधि में, आप env संशोधित करने के लिए है, जो रैक पर्यावरण है सक्षम होना चाहिए। रैक प्रत्येक शीर्षलेख में HTTP_ तैयार करता है, इसलिए Accept शीर्षलेख env['HTTP_ACCEPT'] के माध्यम से एक्सेस किया जाएगा।

तो यदि आपको कुछ शीर्षलेखों को हटाने की आवश्यकता है, तो आपको env.delete('HTTP_ACCEPT') जैसे कुछ करने में सक्षम होना चाहिए। फिर जब आप @app.call(env) करते हैं, तो यह आपके संशोधित env का उपयोग करेगा।

the Rack documentationenv ऑब्जेक्ट पर अधिक जानकारी के लिए देखें (देखें "पर्यावरण")।

+0

ग्रेट, मैं इसे आज़मा दूंगा, क्या आपको पता है कि मेरा सेटअप रैक करने से पहले हेडर को रोकता है या निष्पादन आदेश के मामले में मिडलवेयर पदार्थ लोड करने का आदेश करता है। – Bob

+0

मेरा मानना ​​है कि रैक अभी भी पहले अनुरोध को रोक देगा, लेकिन फिर इसे सीधे रेल के बजाय मिडलवेयर पर भेज दें। लेकिन मैं 100% निश्चित नहीं हूँ। –

+0

यदि ऐसा है, तो यह मेरे लिए काम नहीं करेगा। मैंने अभी '@ एप' ऑब्जेक्ट क्लास को छोड़ दिया है और यह 'रैक :: लॉक' दिखाता है जिसका अर्थ है कि रैक पहले ही इसे प्राप्त कर चुका है। अरे। – Bob

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