Wie trete ich mit Ruby Pry aus einer Schleife heraus?

212

Ich verwende Pry mit meiner Rails-Anwendung. Ich habe binding.pryin meinem Modell eine Schleife eingerichtet, um ein Problem zu beheben. Beispielsweise:

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

Wenn ich tippe quit, geht es zur nächsten Iteration und stoppt erneut. Gibt es eine Möglichkeit, aus der Schleife auszusteigen, damit ich nicht quit100 Mal tippen muss ?

Derzeit weiß ich nur, wie ich daraus herauskomme, indem ich CTRL+ verwende Cund die Anwendung neu starte.

Ryan
quelle

Antworten:

412

Geben Sie Folgendes ein, um Pry bedingungslos zu beenden

exit-program

Bearbeiten aus @ Nicks Kommentar : Funktioniert auch:

!!!
Evandro
quelle
Danke @Evandro, genau das habe ich gesucht!
Ryan
Obwohl Sie offensichtlich sofort auf die Bindung exittreffen, kann das Programm mit just weiter ausgeführt werden.
AJP
1
Dies hat bei mir beim Laufen nicht funktioniert rspec. Aber STRG-C hat es zweimal getan.
Eric Walker
5
Unter Mac Ctrl + COS X wird durch zweimaliges Drücken die Pry-Sitzung beendet, aber auch das Terminalfenster wird effektiv beendet: Die nachfolgende Ausgabe ist fehlerhaft, sodass ich diese Terminal-Registerkarte schließen und zu einer neuen wechseln muss. Hat !!!diese erschwerende Wirkung jedoch nicht.
Topher Hunt
@Evandro Du hast keine Ahnung, wie mich das gerettet hat!
Sri Harsha Kappala
111

Ich benutze:

disable-pry

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

Stebooks
quelle
11
So aktivieren Sie (über die Befehlszeile) erneut: ENV ['DISABLE_PRY'] = nil
stebooks
2
Ich konnte Pry nach der Verwendung von Disable-Pry nicht erneut eingeben. Auch nach Verwendung von ENV ['DISABLE_PRY'] = nil
daslicious
2
Um pry erneut einzugeben, müssen Sie lediglich ENV['DISABLE_PRY'] = nilin Ihrem Controller nicht in der Befehlszeile ODER in der Rails-Konsole festlegen .
Atul Khanduri
Dies ist die perfekte Option, wenn Sie Guard verwenden und nur möchten, dass es für diesen Testlauf nicht mehr ausgeführt wird. Es wird beim nächsten Testlauf zurückgesetzt.
BBonifield
31

Um alles zu beenden, verwenden Sie:

exit!

Dies sollte alle fortlaufenden Bindungen ignorieren.

Blake
quelle
4
Dies tötet gleichzeitig auch den Server. exit-programist wahrscheinlich immer noch die beste Option, wenn Sie den Server nicht neu starten möchten.
Ryan
3
Nur zur Verdeutlichung exit-programkönnen Sie Ihre rails serverSitzung beibehalten , scheinen aber einenSystemExit
Alan David Garcia
24

Dreifacher Ausruf ( !!!) würde das tun.

Hahn
quelle
Dies war die Lösung für mich unter OSX 10.11.4 (El Capitan). Ich habe die disable-pry+ ENV['DISABLE_PRY'] = nil-Kombination nicht ausprobiert, aber ich habe versucht, exit-programwas mir einen systemExit gab. Dieser funktioniert einfach. (Auf Schienen 3.2.22.2, hebel 0.10.3 und Rubin 1.9.3)
SidOfc
17

Verwenden

disable-pry

Fügen Sie dies zum Rendern Ihrem Controller hinzu

ENV['DISABLE_PRY'] = nil
Chet3x16
quelle
14

Eine binding.pryAnweisung entspricht genau einem Haltepunkt in GDB. Ein solcher Haltepunkt in GDB würde auch 100 Mal erreicht werden.

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

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

Anschließend beenden Sie die aktuelle Sitzung, indem Sie einfach eingeben exit.

horseyguy
quelle
1

Basierend auf den beiden vorherigen Antworten:

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

Ich möchte nur einen einfachen dummen Trick teilen, den ich persönlich benutze, um mir nicht die DISABLE_PRYganze Zeit über die Umgebungsvariable Sorgen zu machen . Fügen Sie diesen Rückruf ApplicationControllerdauerhaft zum Basis-Controller Ihres Projekts hinzu. PRY wird bei jedem Aufruf automatisch wieder aktiviert 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
zinovyev
quelle
1

Mit gem können pry-movesSie mit f(finish command) aus der Schleife treten


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
Daniel Garmoshka
quelle
0

Drücken Sie 'q' und Sie werden genau so sehen

[1] pry(#<AlbumsController>)>

Art

exit

Dieses eine Wort reicht aus, wenn nicht:

control + c
Herzloser Vayne
quelle