it-swarm.com.de

Wie trete ich mit Ruby Pry aus einer Schleife heraus?

Ich verwende Pry mit meiner Rails-Anwendung. Ich habe in meinem Modell binding.pry in eine Schleife gesetzt, um zu versuchen, ein Problem zu beheben. Zum Beispiel:

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

Wenn ich quit eingebe, geht es zur nächsten Iteration und stoppt erneut. Gibt es eine Möglichkeit, die Schleife zu verlassen, damit ich nicht 100 Mal quit eingeben muss?

Derzeit weiß ich nur, wie ich daraus herauskomme, wenn ich es benutze CTRL+C und starten Sie die Anwendung neu.

193
Ryan

Um Pry unbedingt zu beenden, geben Sie ein

exit-program
362
Evandro

Ich benutze:

disable-pry

Dadurch wird das Programm weiter ausgeführt, die Ausführung wird jedoch nicht fortgesetzt. Dies ist besonders hilfreich, wenn Sie in der Konsole debuggen.

95
stebooks

Um alles zu beenden, verwenden Sie:

exit!

Dies sollte alle laufenden Bindungen ignorieren.

30
Blake

Ein dreifacher Ausruf (!!!) würde das tun.

22
Hahn

Benutzen 

disable-pry

Fügen Sie dies der Steuerung hinzu, um es zu ändern

ENV['DISABLE_PRY'] = nil
16
Chet3x16

Eine binding.pry-Anweisung entspricht genau einem Haltepunkt in GDB. Ein solcher Haltepunkt in GDB würde auch 100-mal getroffen.

Wenn Sie möchten, dass der binding.pry für die erste Wiederholung der Schleife einmal getroffen wird, verwenden Sie eine Bedingung für den binding.pry wie folgt:

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

Sie beenden dann die aktuelle Sitzung, indem Sie einfach exit eingeben.

14
horseyguy

Basierend auf den zwei vorherigen Antworten:

Danke Jungs! Ihre Ratschläge haben mir wirklich sehr geholfen!

Ich möchte nur einen einfachen blöden Trick teilen, den ich persönlich benutze, um mich nicht ständig um die Umgebungsvariable DISABLE_PRY zu kümmern. Fügen Sie diesen Rückruf dauerhaft zum Basiscontroller ApplicationController Ihres Projekts hinzu. Bei jedem Aufruf von disable-pry würde PRY automatisch wieder aktiviert:

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

  private

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

Mit gem pry-moves können Sie die Schleife mit f verlassen (Befehl beenden).


beispiel:

    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
0
Dan Key

drücke 'q' und du siehst genau so

[1] pry(#<AlbumsController>)>

art

exit

dieses eine Wort reicht aus, wenn nicht:

control + c
0
Heartless Vayne