2010-09-20 10 views
12

मेरे एप्लिकेशन में OAuth2 को लागू करने में, मैं की तरह यूआरआई संभाल करने की जरूरत है:पाइप चरित्र को रेल 3/रूबी 1.9.2 में खराब यूआरआई त्रुटि उत्पन्न करने से कैसे रोकें?

http://localhost:3000/sessions/create/?code=lorem|ipsum

सुनिश्चित नहीं हैं कि अगर यह एक रेल 3 या रूबी 1.9.2 समस्या (शायद URI.parse) है, लेकिन किसी भी घटना में, WEBrick Error bad URI kicks।

कोई भी कामकाज के बारे में जानता है? धन्यवाद।

+1

आप अपने शीर्षक में टाइपो ठीक करना चाहें ... – hurikhan77

+0

डाल दिया है '# कोडिंग: के शीर्ष पर UTF-8' अपने फ़ाइलें? 1.9+ दुख के बारे में, चरित्रों के बारे में बहुत संवेदनशील है। – oma

उत्तर

15

मैं हाल ही में एक ही आवश्यकता (और समस्या) में भाग गया। रेल 3 और रूबी 1.9.2 पर।

यह हमारे स्टेजिंग/उत्पादन पर्यावरण (nginx) के लिए कोई समस्या नहीं है, लेकिन मुझे यह जानने में दिलचस्पी थी कि वेबबैक के साथ समस्या क्या थी। यूआरआई :: Parser.split विधि में समस्या को बंद कर देता है, विशेष रूप से यह पैटर्न मिलान कैसे यूआरआई :: REGEXP :: पैटर्न कॉन्स्टेंट के साथ बीजित किया जाता है।

आप कॉन्फ़िगरेशन/वातावरण/विकास.आरबी में निम्नलिखित जोड़कर इसे "ठीक" कर सकते हैं (मान लीजिए कि आप केवल देव में वेबब्रिक का उपयोग कर रहे हैं .. या आप इसे कॉन्फ़िगर/प्रारंभकर्ता फ़ाइल में डाल सकते हैं) ..

# this allows WEBrick to handle pipe symbols in query parameters 
URI::DEFAULT_PARSER = 
    URI::Parser.new(:UNRESERVED => URI::REGEXP::PATTERN::UNRESERVED + '|') 

एनबी: कि सेटिंग: अनारक्षित => "।!) -_ ~ * '(a-zA-Z \ घ |"

+1

'यूआरआई :: पार्सर '==>' नाम त्रुटि: अनियमित स्थिर यूआरआई :: पार्सर'। कोई विचार? वह रूबी है 1.8.7 – Matthias

+1

हां, 1.8 में यूआरआई बहुत अलग है, और अनिवार्य रूप से यूआरआई मॉड्यूल के बड़े हिस्से को फिर से लिखने के बिना पैच के लिए बहुत कठिन है। यदि आपके पास यह समस्या है, तो सर्वोत्तम पाठ्यक्रम 1.9 तक अपग्रेड करना है या WEBrick – tardate

+0

के अलावा कुछ और उपयोग करना यह वास्तव में एक अच्छा समाधान है। एक समस्या यह थी कि अगर आप यूआरएल से बचते हैं, तो कुछ साइटें (जैसे याहू) आपको अनचाहे वर्णों (!) के साथ एक यूआरएल पर भेज देंगे और ओपनुरि क्रैश हो रही है। धन्यवाद! – idrinkpabst

1

मैं वेबिन के लिए थिन में बस स्वैपिंग समाप्त कर दिया और इसमें कोई समस्या नहीं थी।

7

प्रारंभकर्ता ने काम किया, लेकिन मैं यूआरआई.स्केप का उपयोग करके समाप्त हो गया क्योंकि यह क्लीनर लग रहा था और ऐसा लगता है कि यह अधिक मामलों को संभालेगा।

URI.join(origin_url, URI.escape(parsed_link)).to_s 

प्लस इस कोड को सिर्फ लगते फ्लॉप सही

# I need this because URI.join in crawler.rb bombs with '|' symbols 
old_verbose = $VERBOSE 
$VERBOSE = nil 
URI::DEFAULT_PARSER = URI::Parser.new(:UNRESERVED => URI::REGEXP::PATTERN::UNRESERVED + '|') 
$VERBOSE = old_verbose 
संबंधित मुद्दे