मैं एक सक्रिय संसाधन स्रोत को डीबग करने का प्रयास कर रहा हूं जो काम नहीं कर रहा है।मैं ActiveResource अनुरोध पर HTTP प्रतिक्रिया कैसे देखूं?
ActiveResource अनुरोध के HTTP प्रतिक्रिया को देखने का सबसे अच्छा तरीका क्या है?
मैं एक सक्रिय संसाधन स्रोत को डीबग करने का प्रयास कर रहा हूं जो काम नहीं कर रहा है।मैं ActiveResource अनुरोध पर HTTP प्रतिक्रिया कैसे देखूं?
ActiveResource अनुरोध के HTTP प्रतिक्रिया को देखने का सबसे अच्छा तरीका क्या है?
यह आसान है। बस वापस आने वाली प्रतिक्रिया को देखें। :)
दो विकल्प:
puts response.inspect
रखो। इसे हटाने के लिए याद रखें।बाद के विकल्प का एक मूर्ख उदाहरण है।
# Somewhere buried in ActiveResource:
class Network
def get
return get_request
end
def get_request
"I'm a request!"
end
end
# Somewhere in your source files:
class Network
def print_request
request = old_get_request
puts request
request
end
alias :old_get_request :get_request
alias :get_request :print_request
end
कल्पना करें कि प्रथम श्रेणी परिभाषा ActiveRecord स्रोत फ़ाइलों में है। दूसरी कक्षा परिभाषा कहीं आपके आवेदन में है।
$ irb -r openclasses.rb
>> Network.new.get
I'm a request!
=> "I'm a request!"
आप देख सकते हैं कि यह इसे प्रिंट करता है और फिर इसे वापस करता है। साफ, हुह?
(। और हालांकि मेरी सरल उदाहरण के बाद से यह रेल का उपयोग नहीं कर रहा है इसका इस्तेमाल नहीं करता है, बाहर alias_method_chain
जाँच अपना उपनाम कॉल गठबंधन करने के लिए)
शायद यातायात स्नफ़फर का उपयोग करने का सबसे अच्छा तरीका है।
(जो पूरी तरह से काम करेगा ... मेरे मामले में छोड़कर यातायात मैं देखना चाहता हूँ एन्क्रिप्टेड है। डी 'ओह!)
या चीजों में हो रही है जब मैं सटीक आंतरिक पता नहीं है की मेरी विधि सचमुच सिर्फ "डीबगर" कथन में फेंकने के लिए, "स्क्रिप्ट/सर्वर - डीबगर" का उपयोग कर सर्वर शुरू करें और तब तक कोड के माध्यम से कदम उठाएं जब तक कि मैं उस स्थान पर नहीं हूं, फिर आईआरबी में कुछ निरीक्षण शुरू करें। .... इससे मदद मिल सकती है (हे ल्यूक बीटीडब्ल्यू)
मुझे Wireshark पसंद है क्योंकि आप इसे वेब ब्राउज़र क्लाइंट एंड (आमतौर पर आपकी विकास मशीन) पर सुनना शुरू कर सकते हैं और फिर पृष्ठ अनुरोध कर सकते हैं। फिर आप एचटीटीपी पैकेट पा सकते हैं, एचटीएमएल को आगे और आगे जाने वाले HTTP को देखने के लिए राइट क्लिक करें और "वार्तालाप का पालन करें"।
यह केवल काम करता है अगर आप भी सर्वर पर नियंत्रण:
URL है, जो कहा जाता था बाहर सर्वर लॉग और मछली पालन करें:
Completed in 0.26889 (3 reqs/sec) | Rendering: 0.00036 (0%) | DB: 0.02424 (9%) | 200 OK [http://localhost/notifications/summary.xml?person_id=25738]
और फिर खोलने कि फ़ायरफ़ॉक्स में। यदि सर्वर सचमुच रीस्टफुल (यानी स्टेटलेस) है तो आपको एआरएस के समान प्रतिक्रिया मिल जाएगी।
फ़ायरफ़ॉक्स प्लगइन लाइव http शीर्षलेख (http://livehttpheaders.mozdev.org/) इसके लिए बहुत अच्छा है। या आप http://www.httpviewer.net/
बंदरगाह वेबसाइट का उपयोग कर सकते हैं बंदर नेट :: HTTP डीबग मोड सक्षम करने के लिए कनेक्शन पैच करें। https://gist.github.com/591601 देखें - मैंने इसे ठीक से हल करने के लिए लिखा है।इस रेल को अपने रेल ऐप में जोड़ने से आपको Net::HTTP.enable_debug!
और Net::HTTP.disable_debug!
मिल जाएगा जो आप डीबग जानकारी प्रिंट करने के लिए उपयोग कर सकते हैं।
नेट :: HTTP डीबग मोड असुरक्षित है और उत्पादन में उपयोग नहीं किया जाना चाहिए, लेकिन डीबगिंग के लिए बेहद जानकारीपूर्ण है।
config/initializers/
निम्नलिखित सामग्री के साथ 'debug_connection.rb'
कहा जाता है के लिए एक नई फ़ाइल जोड़ें:
class ActiveResource::Connection
# Creates new Net::HTTP instance for communication with
# remote service and resources.
def http
http = Net::HTTP.new(@site.host, @site.port)
http.use_ssl = @site.is_a?(URI::HTTPS)
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl
http.read_timeout = @timeout if @timeout
# Here's the addition that allows you to see the output
http.set_debug_output $stderr
return http
end
end
यह $ करने के लिए पूरे नेटवर्क यातायात प्रिंट होगा stderr।
मैं अपने ऐप को आउटपुट करने के लिए पैच करने के बजाए तार पर जा रहे यातायात को देखने के लिए यहां TCPFlow का उपयोग करता हूं।
चार्ल्स 'एचटीटीपीएस प्रॉक्सी इस तरह की चीज़ के लिए बहुत उपयोगी है। –