2009-09-01 17 views
28

मेरे मुख्य सिनात्रा नियंत्रक में, मैं एक फॉर्म से पोस्ट किए जाने के बाद पैरा हैश को डीबग करना चाहता हूं।आप एक रेल ऐप की तरह सिनात्रा ऐप कैसे डिबग करते हैं?

मैं जोड़ लिया है:

puts params.inspect 

और

set :logging, :true 

params.inspect काम करता है सब कुछ अच्छी तरह से हो जाता है। लेकिन अगर नियंत्रक निष्पादित होने से पहले कोई त्रुटि होती है तो मुझे त्रुटि के बारे में कोई जानकारी नहीं मिल रही है जैसे कि मैं डिफ़ॉल्ट रूप से रेल में करता हूं।

उपयोगी डीबग जानकारी प्राप्त करने का सबसे अच्छा तरीका क्या है?

This example सब पर काम नहीं किया (के बाद मैं इस कोड से जोड़े गए एप्लिकेशन भी शुरू नहीं होगी):

configure do 
    Log = Logger.new("sinatra.log") 
    Log.level = Logger::INFO 
end 

द्वारा पीछा किया:

Log.info "#{@users.inspect}" 
+1

कैसे 'बारे में params' – coderek

उत्तर

19

आप फिल्टर से पहले एक जोड़ने की कोशिश कर सकता है कि पैरामीटर

before do 
    puts '[Params]' 
    p params 
end 
+0

जुटाने यह करने के लिए किया था विरासत में sinatra कोड पर। एआरबी (या हैमल) फ़ाइल के भीतर ''' <% पी पैराम्स%> '' 'शरीर के लिए लिखे गए किसी और चीज के ठीक ऊपर। पैरा आपके कंसोल में दिखाई देंगे। –

1

क्या आपने इस तरह कुछ करने की कोशिश की है लेख: http://www.gittr.com/index.php/archive/logging-with-sinatra-and-passenger-another-try/

+0

यह लिंक अब कार्यात्मक नहीं है – Akshay

+1

जब किसी लिंक के साथ उत्तर देना सबसे महत्वपूर्ण भाग को उत्तर में कॉपी करना महत्वपूर्ण है, तो उचित विशेषता और पृष्ठ से लिंक दें। लिंक तोड़ते हैं तो टूट जाते हैं, जिसके परिणामस्वरूप बेकार जवाब होते हैं। –

1

मैं अनुमान लगा रहा हूं कि आपने अपने मुख्य सिनात्रा नियंत्रक का उल्लेख किया है, तो आपके पास एक से अधिक हैं, जिसका अर्थ है कि आप क्लासिक (शीर्ष-स्तरीय) सिनात्रा ऐप का उपयोग करने के बजाय सिनात्रा :: बेस को उप-वर्गीकृत कर रहे हैं। यदि यह वास्तव में मामला है, तो डिफ़ॉल्ट रूप से डिफ़ॉल्ट त्रुटि-हैंडलिंग जो सिनात्रा करता है डिफ़ॉल्ट रूप से अक्षम है।

यदि आप कक्षा परिभाषा में set :show_exceptions, true if development? शामिल करते हैं, तो आपको केवल एक आंतरिक सर्वर त्रुटि के बजाय एक स्टैक ट्रेस, पैराम्स इत्यादि शामिल करने वाले दोस्ताना त्रुटि पृष्ठ मिलेंगे। एक और विकल्प set :raise_errors, false है और उसके बाद error do ... end ब्लॉक शामिल है जो आपके मार्गों में से एक त्रुटि उत्पन्न करता है।

3

मैं अत्यधिक रूबी-डीबग का उपयोग करने की सलाह देता हूं। चार या पांच बुनियादी आदेशों को सीखने के बाद सेटअप करना और उपयोग करना बहुत आसान है। यह आपको ब्रेकपॉइंट सेट करने की अनुमति देगा जहां आप पैराम का निरीक्षण करना चाहते हैं और इसके साथ इंटरैक्टिव रूप से खेलना चाहते हैं जैसे आप आईआरबी में करेंगे।

13

मेरी राय यह है कि डीबग के लिए आपको :development कॉन्फ़िगर करना चाहिए क्योंकि इस परिदृश्य में कुछ डिबगिंग झंडे चालू हैं।

enable :logging, :dump_errors, :raise_errors 

और अपने प्रवेश की सुविधा के लिए:

log = File.new("sinatra.log", "a") 
STDOUT.reopen(log) 
STDERR.reopen(log) 

सिनात्रा पुस्तिका से:

  • dump_errors विकल्प नियंत्रित करता है कि क्या पश्व-अनुरेखन तो, अपने configure do ब्लॉक के तहत आप झंडे सक्षम कर सकते हैं एक मार्ग से अपवाद उठाए जाने पर rack.errors पर डंप किया गया है। विकल्प शीर्ष-स्तरीय ऐप्स के लिए डिफ़ॉल्ट रूप से सक्षम है।

  • raise_errors - अपवादों को ऐप (के बाहर प्रचार करने की अनुमति दें)) :raise_errors विकल्प क्लासिक शैली ऐप्स के लिए डिफ़ॉल्ट रूप से अक्षम है और सिनात्रा :: बेस सबक्लास के लिए डिफ़ॉल्ट रूप से सक्षम है।

मैं अपने नियंत्रकों के बीच में

puts "something" + myvar.inspect 

विधि का उपयोग करें।

10

जैसा कि @ जेएसन कहते हैं, रूबी-डीबग एक बहुत अच्छा टूल है।

आदेश सिनात्रा में इसका इस्तेमाल करने के लिए,

require 'ruby-debug/debugger' 

जहां आप चाहें डिबगिंग शुरू करने के लिए सम्मिलित करें।

8

मैं प्रिये या रूबी डीबगर का उपयोग करने की सलाह देता हूं। प्रिये के साथ, आप कमांड लाइन का उपयोग अपने तरीकों और चरों को पार करने के लिए कर सकते हैं जैसे आप बाश में करेंगे।

"How to use Pry with Sinatra?" देखें।

+0

यह उपलब्ध sinatra ऐप्स डीबग करने का सबसे उपयोगी तरीका है। – three

4

साइनेट्रा ऐप डीबग करने का सबसे अच्छा तरीका खोजने के लिए, मैंने जिथब में एक रेपो बनाया। सबसे उपयोगी हिस्सा विधि डीबग में कदम है, जो नीचे जैसा दिखता है। https://github.com/hlee/sinatra_debugger_example

1

मैं debugger मणि का उपयोग कर की सलाह देते हैं:

enter image description here

यहाँ रेपो है।

अपने सिनात्रा app के साथ इस का उपयोग करने के लिए:

  1. अपने Gemfile

    gem "debugger" 
    
  2. को मणि जोड़े चलाकर मणि स्थापित

    bundle 
    
  3. आपका मुख्य सिनात्रा में ऐप फ़ाइल,

    जोड़ें
    require 'debugger' 
    
  4. अब डिबग करने के लिए, तो आप सिर्फ निम्न पंक्ति

    debugger 
    
    कहीं भी

    जोड़ने के लिए अपने कोड में है।

कोड निष्पादित की जा रही है जब और debugger देखा जाता है, कोड बंद कर देंगे और आप चर, चलाने के आदेश (eval का प्रयोग करके) का निरीक्षण कर सकते, आदि

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