Was sind einige Tipps zum Debuggen von Ruby Erb -Dateien?
Frage
Derzeit mache ich Folgendes:
- Wenn es sich um eine kleine Änderung handelt, können Sie zurückkehren, sparen und testen.
- Für eine große Änderung oder neue Datei löschen oder Kommentar 1/2 den Code und testet erneut. Führen Sie eine binäre Suche durch, bis ich den kaputten Code gelöscht/gefunden habe.
Der Anrufstack scheint nichts in meiner .rhtml -Datei zu entsprechen.
(erb):6:in `block in <main>'
/opt/local/lib/ruby/1.9.1/erb.rb:753:in `eval'
/opt/local/lib/ruby/1.9.1/erb.rb:753:in `result'
bin/correct.rb:45:in `block in <main>'
/opt/local/lib/ruby/1.9.1/webrick/httpservlet/prochandler.rb:26:in `call'
Lösung
Wie Daniel sagte, hilft Ihnen die Fehlermeldung in den meisten Fällen, schnell herauszufinden, wo sich der Fehler befindet.
Es gibt in der Tat einige Gelegenheiten, in denen es nicht tut.
Die dummer, schnellere Art, diese binäre Suche durchzuführen, besteht darin, einfach eine falsche Zeile einzufügen, wie
<%= the_error_is_after_this_line %>
und bewegen Sie die Linie, bis Sie die genaue Reihe finden.
Ich bin nicht zu den hellen Programmierern, die tonnenweise Zeilen pro Zeit schreiben können, die nur funktionieren. Normalerweise entwickle ich mich durch kleine Schritte und lade die Seite auf dem Browser jedes Mal neu.
Das heißt, der bessere Weg, um schwere Ansichten (oder Methoden oder was auch immer) zu vermeiden, besteht darin, einfache, kurze, kurze zu schreiben. Meine Faustregel ist, dass ich in der Lage sein muss, die gesamte Ansicht (oder Methode) im Editor -Fenster zu lesen, es sei denn, es handelt sich nur um HTML.
Verwenden Sie immer Helfer und teilweise Ansichten. Können Sie mehr als zwei () oder [] in einer Zeile Ihrer ERB -Ansicht zählen? Wenn ja, verwenden Sie einen Helfer.
Können Sie Ihrer Ansicht mehr als zwei oder drei Blöcke zählen? Verwenden Sie einige Partials.
Andere Tipps
Ich bin mir nicht sicher, ob dies für dieses Problem anwendbar ist, aber vielleicht hilft es jemandem. Ich benutze Rails 5 und wenn Sie setzen
<% debugger %>
In Ihrer HTML.ERB -Datei wird das Terminalfenster, in dem Ihr Rails -Server ausgeführt wird, pausieren. Von dort aus können Sie alle Parameter oder Variablen, die Ihre HTML.ERB -Datei hat, debuggen.
Im Allgemeinen sagen Sie Erb -Fehler, wo sie aufgetreten sind. Zum Beispiel ist hier Ihr Fehler in Zeile 6 der ERB -Datei. Sie haben die Fehlermeldung weggelassen, die mit der Backtrace geliefert wurde, aber dies zeigt normalerweise, nach welcher Art von Fehler Sie suchen müssen. Zum Beispiel in meinem einfachen Test hier:
NameError: undefined local variable or method `asdf' for main:Object
from (erb):7
from (irb):6
Es ist klar genug, was und wo schief geht.
Können Sie weitere Informationen über Ihren Fehler und die ERB veröffentlichen, die ihn verursacht haben?
Auf Rails 5 finden Sie standardmäßig das Edelstein "Byebug" bei GemFile:
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end
Dann können Sie Byebug auf Ihrem Controller verwenden, ihn überall hinstellen, wo immer Sie möchten, und oft funktionieren es wie ein "Haltepunkt" und führen schließlich Ihren Server $ Rails -Server aus
class UsersController < ApplicationController
byebug
end
Verwenden Sie bei der Befehlszeile Hilfe für Optionen, normalerweise verwenden Sie Buchstaben 'C', um mit dem nächsten Haltepunkt oder dem Buchstaben 'n' fortzufahren, um Schritt für Schritt vorzuentwickeln, und Strg+d zum Beenden.
(byebug) help
break -- Sets breakpoints in the source code
catch -- Handles exception catchpoints
condition -- Sets conditions on breakpoints
continue -- Runs until program ends, hits a breakpoint or reaches a line
debug -- Spawns a subdebugger
delete -- Deletes breakpoints
disable -- Disables breakpoints or displays
display -- Evaluates expressions every time the debugger stops
down -- Moves to a lower frame in the stack trace
edit -- Edits source files
enable -- Enables breakpoints or displays
finish -- Runs the program until frame returns
frame -- Moves to a frame in the call stack
help -- Helps you using byebug
history -- Shows byebug's history of commands
info -- Shows several informations about the program being debugged
interrupt -- Interrupts the program
irb -- Starts an IRB session
kill -- Sends a signal to the current process
list -- Lists lines of source code
method -- Shows methods of an object, class or module
next -- Runs one or more lines of code
pry -- Starts a Pry session
quit -- Exits byebug
restart -- Restarts the debugged program
save -- Saves current byebug session to a file
set -- Modifies byebug settings
show -- Shows byebug settings
skip -- Runs until the next breakpoint as long as it is different from the current one
source -- Restores a previously saved byebug session
step -- Steps into blocks or methods one or more times
thread -- Commands to manipulate threads
tracevar -- Enables tracing of a global variable
undisplay -- Stops displaying all or some expressions when program stops
untracevar -- Stops tracing a global variable
up -- Moves to a higher frame in the stack trace
var -- Shows variables and its values
where -- Displays the backtrace
(byebug)
Eine weitere Option zum Anzeigen des Debugs (Params): In der App/Ansichten/Layouts/application.html.erb -Datei unter Render Fußzeile und oben setzen Sie die nächsten:
<%= debug(params) if Rails.env.development? %>
Schließlich teile ich diese Optionen, wie ich als Neuling in Ruby on Rails kenne. Hoffe das hilft.
Quelle einer Hilfe: https://rubyplus.com/articles/3631-debugging-using-byebug-ge-in-rails-5