रूबी पीरी के साथ मैं एक लूप से कैसे बाहर निकलूं?


212

मैं अपने रेल अनुप्रयोग के साथ Pry का उपयोग कर रहा हूं। मैंने binding.pryअपने मॉडल में एक समस्या के प्रयास और डीबग करने के लिए एक लूप के अंदर सेट किया । उदाहरण के लिए:

(1..100).each do |i|
  binding.pry
  puts i
end

जब मैं टाइप करता हूं quit, तो यह अगले पुनरावृत्ति पर जाता है और फिर से बंद हो जाता है। क्या लूप से बाहर निकलने का एक तरीका है ताकि मुझे quit100 बार टाइप न करना पड़े?

वर्तमान में एकमात्र तरीका मुझे पता है कि इससे कैसे बाहर निकलना है CTRL+ Cएप्लिकेशन का उपयोग और फिर से शुरू करना।

जवाबों:


412

बिना शर्त पीरी से बाहर निकलने के लिए टाइप करें

exit-program

@ निक की टिप्पणी से संपादित करें : यह भी काम करता है:

!!!

धन्यवाद @ Evandro, वही है जिसकी मुझे तलाश थी!
रयान

हालांकि आप स्पष्ट रूप से सीधे बंधन से टकराएंगे, बस उपयोग exitकरने से कार्यक्रम चलता रहेगा।
एजेपी

1
दौड़ते समय यह मेरे काम नहीं आया rspec। लेकिन CTRL-C, दो बार, किया।
एरिक वॉकर

5
मैक OSX पर, Ctrl + Cदो बार दबाने से Pry सत्र को मार देगा, लेकिन प्रभावी रूप से उस टर्मिनल विंडो को भी मार देगा: बाद में आउटपुट इस तरह से गड़बड़ हो जाता है कि मुझे उस टर्मिनल टैब को बंद करने और एक नए पर जाने की आवश्यकता है। हालांकि !!!इसका असर नहीं होता है।
टोपेर हंट

@Evandro आपको पता नहीं है कि इसने मुझे कैसे बचाया!
श्री हर्ष कप्पाला

111

मैं उपयोग करता हूं:

disable-pry

यह कार्यक्रम को चालू रखेगा, लेकिन निष्पादन को रोकना जारी रखेगा। यह विशेष रूप से तब सहायक होता है जब आप कंसोल में डीबगिंग कर रहे होते हैं।


11
फिर से सक्षम करने के लिए (कमांड लाइन से): ENV ['DISABLE_PRY'] = nil
stebooks

2
मैं अक्षमता का उपयोग करने के बाद pry reenter करने में सक्षम नहीं था, pry। ENV ['DISABLE_PRY'] का उपयोग करने के बाद भी = nil
daslicious

2
Pry को पुन: प्रस्तुत करने के लिए, आपको बस ENV['DISABLE_PRY'] = nilअपने कंट्रोलर में कमांड लाइन या रेल कंसोल में सेट करना है ।
अतुल खंडूरी

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

31

सब कुछ से बाहर निकलने के लिए, उपयोग करें:

exit!

यह सभी कार्यवाही बाइंडिंग को अनदेखा करना चाहिए।


4
यह भी एक ही समय में सर्वर को मारता है। exit-programयदि आप सर्वर को पुनः आरंभ नहीं करना चाहते हैं, तब भी शायद सबसे अच्छा विकल्प है।
रयान

3
बस स्पष्ट exit-programकरने के लिए आप अपने rails serverसत्र को बनाए रखने की अनुमति देता है, लेकिन लगता हैSystemExit
एलन डेविड गार्सिया

24

ट्रिपल एक्सक्लेमेशन ( !!!) ऐसा करेगा।


OSX 10.11.4 (El Capitan) पर यह मेरे लिए समाधान था, मैंने disable-pry+ ENV['DISABLE_PRY'] = nilकॉम्बो की कोशिश नहीं की, लेकिन मैंने कोशिश की exit-programजिसने मुझे एक सिस्टमएक्सिट दिया। यह सिर्फ काम करता है। (पर रेल 3.2.22.2, जिज्ञासा 0.10.3 और गहरे लाल रंग का 1.9.3)
SidOfc

17

उपयोग

disable-pry

त्यागने योग्य बनाने के लिए, इसे अपने नियंत्रक में जोड़ें

ENV['DISABLE_PRY'] = nil

14

एक binding.pryकथन GDB में एक ब्रेकपॉइंट के समान है। GDB में इस तरह का ब्रेकपाइंट 100 बार भी हिट होगा।

यदि आप केवल binding.pryलूप के पहले पुनरावृत्ति के लिए एक बार हिट होना चाहते हैं , तो इस binding.pryतरह से एक सशर्त का उपयोग करें:

(1..100).each do |i|
  binding.pry if i == 1
  puts i
end

आप तब केवल टाइप करके वर्तमान सत्र से बाहर निकल जाते हैं exit


1

उपरोक्त दो पिछले उत्तरों के आधार पर:

आप लोगों को धन्यवाद! आपकी सलाह ने मुझे वास्तव में बहुत मदद की है!

मैं बस एक आसान बेवकूफ चाल साझा करना चाहता हूं, जो कि मैं व्यक्तिगत रूप से DISABLE_PRYहर समय पर्यावरण चर के बारे में चिंता न करने के लिए उपयोग करता हूं । ApplicationControllerस्थायी रूप से अपनी परियोजना के आधार नियंत्रक में इस कॉलबैक को जोड़ें । हर बार PRY को स्वचालित रूप से फिर से सक्षम disable-pryकरना कहा जाता है:

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :reenable_pry

  private

  def reenable_pry
    ENV['DISABLE_PRY'] = nil
  end
end

1

मणि का उपयोग pry-movesकर आप लूप से बाहर कदम रख सकते हैं f(फिनिश कमांड)


उदाहरण:

    42: def test
    43:   3.times do |i|
 => 44:     binding.pry
    45:     puts i
    46:   end
    47:   puts :finish
    48: end

[1] pry(main)> f
0
1
2

Frame: 0/1 method
From: playground/sand.rb:47 main

    42: def test
    43:   3.times do |i|
    44:     binding.pry
    45:     puts i
    46:   end
 => 47:   puts :finish
    48: end

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.