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.
Um Pry unbedingt zu beenden, geben Sie ein
exit-program
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.
Um alles zu beenden, verwenden Sie:
exit!
Dies sollte alle laufenden Bindungen ignorieren.
Ein dreifacher Ausruf (!!!
) würde das tun.
Benutzen
disable-pry
Fügen Sie dies der Steuerung hinzu, um es zu ändern
ENV['DISABLE_PRY'] = nil
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.
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
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
drücke 'q' und du siehst genau so
[1] pry(#<AlbumsController>)>
art
exit
dieses eine Wort reicht aus, wenn nicht:
control + c