2013-08-07 7 views
11

का उपयोग किए बिना रत्नों में प्रिये का उपयोग करें, मैं एक रेल ऐप द्वारा उपयोग किए जाने वाले मणि को डीबग करने का प्रयास कर रहा हूं।जेमफाइल को संशोधित किए बिना या 'आवश्यकता'

मैं रत्न स्थानीय रूप से क्लोन के आसपास prying जाना (और मुझे भी इस तरह के git bisect, आदि के रूप में अच्छा काम करने के लिए अनुमति देता है)

# Gemfile 
gem "active_admin", path: "~/dev-forks/active_admin" 

हालांकि, मैं अक्सर करने के लिए कहीं न कहीं एक Gemfile को जिज्ञासा को जोड़ने के साथ अटक कर रहा हूँ इसका उपयोग करने में सक्षम हो, या require "pry" कोड में रहते हुए भी कॉल करें, भले ही मैं इसे वहां नहीं चाहता हूं। उदाहरण के लिए, मैं कभी-कभी इसके बारे में भूल जाऊंगा, बग को ठीक कर दूंगा, और फिर जेमफाइल में प्रिये के साथ प्रोजेक्ट को प्रतिबद्ध करूंगा।

मुझे ऐसा नहीं करना चाहिए, LoadError उत्पन्न होगा, cannot load such file -- pry (LoadError)

मुझे व्यवस्थापक करना है कि मैं विभिन्न संदर्भों (रेल परियोजना, जेम, स्थानीय रूबी) और वास्तविक रत्न (जेमफाइल, आवश्यकता, स्थापित) के बीच थोड़ा सा खो गया हूं।

मैं Gemfiles के हस्तक्षेप के बिना रेल के भीतर एक जेम में binding.pry का उपयोग कैसे कर सकता हूं?

+3

मुझे भी वही समस्या है। एक तकनीक जिसे मैंने माना (लेकिन लागू नहीं किया था) काम के दौरान मेरे कोड के अंदर 'pry' की घटनाओं की जांच के लिए गिट हुक का उपयोग कर रहा था। फिर रेल्स 'जेमफाइल में, विकास समूह में प्राइ जोड़ें; मणि में, जेमफाइल (gemspec नहीं) के लिए pry जोड़ें –

+0

यदि आपके पास कहीं भी 'pry' चिपके हुए हैं तो आपके यूनिट परीक्षण भी असफल हो सकते हैं। –

उत्तर

1

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

आप अपने pry सत्र break SomeClass#run में ब्रेकपॉइंट सेट करने के लिए pry-debugger https://github.com/nixme/pry-debugger जैसे टूल का उपयोग कर सकते हैं।

मुझे लगता है कि प्रत्येक प्रोजेक्ट में pry जोड़ने के लिए मान्य है जिसे मैं एक बग को ठीक करने या सामग्री का योगदान करने के लिए फोर्क करता हूं। बस इसे .gemspec फ़ाइलों में न डालें।

यदि आप अपने रेपो में binding.pry परिवर्तनों को दबा रहे हैं, तो आपको जिम की तरह प्रतिबद्ध हुक जोड़ना चाहिए। मुझे नहीं लगता कि यह एक प्राइ से संबंधित मुद्दा है, यह इस बात पर निर्भर है कि इसे बाहर निकालने से पहले आपके diff की समीक्षा करते समय आप कितनी देखभाल करते हैं।

+0

pry-byebug एक अच्छा टूल भी है: https://github.com/deivid-rodriguez/pry-byebug –

6

अतीत से जॉन! जैसा कि आप जानते हैं, मेरे पास आपकी सभी समस्याओं का जवाब है (लगभग)।

इस मामले में, आप वास्तव में दो समस्याओं का वर्णन कर रहे हैं: (ए) यदि आप Gemfile में नहीं हैं, तो आप require 'pry' नहीं कर सकते हैं, (बी) यदि आप require नहीं करते हैं तो आप प्राइ का उपयोग नहीं कर सकते हैं।

क्या Bundler करता है, के रूप में कॉनरोड इरविन writes:

Bundler एक भयानक मणि है कि आप है कि "अगर यह विकास में काम करता है, यह उत्पादन में काम करता है" विश्वास का एक अच्छा डिग्री देता है। यह मणि निर्भरताओं के बारे में दुष्परिणाम से ऐसा कर सकता है: यदि यह Gemfile में नहीं है, तो इसकी आवश्यकता नहीं है। यह यह भी सुनिश्चित करता है कि हर किसी का विकास पर्यावरण समान है, "यह मेरी मशीन पर काम करता है" इसे एक बहाना के रूप में काटता है।

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

तो सभी अच्छी चीजों Bundler हमें रूबी डेवलपर्स के लिए करता है ऐसा करने में, यह एक चेतावनी के साथ डिजाइन द्वारा आता है: "क्या बंडल/Gemfile (सिस्टम जवाहरात जैसे) बाहर है अब और मौजूद नहीं है।"यह कैसे काम करता है कि require प्रक्रिया को फिर से परिभाषित कर रहा है और यह केवल देखता है कि क्या बंडल में है अपने PATH बदल कर।

इसका मतलब है कि आप Gemfile दूषित किए बिना बिल्कुल भी जिज्ञासा उपयोग नहीं कर सकते, आप कहते हैं, है ना? नहीं एक समाधान के साथ एक मणि कि अस्थायी रूप से पैच Bundler हमारे की आवश्यकता होती है करने के लिए बनाया पराजयों आया और Pry Debundle बनाया इतनी तेजी से। कॉनरोड इरविन स्मार्ट छोटे कुकी वह यह है कि जा रहा है,,।

तो तुम सब करने की है बस require 'pry-debundle' है तो , है ना? ओह ... रुको। हाँ, डेबंडल शायद जेमफाइल में नहीं है।

बंदर फिक्सके स्रोत की प्रतिलिपि बनाना मुश्किल हैसे ~/debundle.rb, और फिर load कि। (अभी के लिए, आपको उस स्रोत फ़ाइल को चलाने के लिए प्रिये लोड की आवश्यकता होगी, लेकिन आप वहां पहुंचने के लिए केवल debundle! विधि चला सकते हैं, प्रिये की आवश्यकता है, और चारों ओर झुकाव कर सकते हैं। थोड़ा बंदरगाह की आवश्यकता है, लेकिन मैं एक पीआर पर काम कर रहा हूं ।)

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