Какие советы по отладке файлов Ruby erb? - PullRequest
4 голосов
/ 29 августа 2009

В настоящее время, когда я получаю сообщение об ошибке в шаблоне erb (для использования с HTTPServer / cgi), я делаю следующее:

  • Если это небольшое изменение, отмените, сохраните и повторно протестируйте.
  • Для больших изменений или нового файла удалите или прокомментируйте 1/2 кода и повторите тестирование. Выполняйте бинарный поиск до тех пор, пока я не удалю / не обнаружу неработающий код.

Кажется, что стек вызовов ничего не соответствует моему файлу .rhtml.

(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'

Ответы [ 4 ]

4 голосов
/ 29 августа 2009

Как сказал Даниэль, в большинстве случаев сообщение об ошибке поможет вам быстро найти, где находится ошибка.

Действительно, есть случаи, когда этого не происходит.

Более тупой, более быстрый способ выполнить бинарный поиск - просто вставить неправильную строку, например

<%= the_error_is_after_this_line %>

и затем перемещайте линию, пока не найдете точную строку.

Я не из тех ярких программистов, которые могут писать тонны строк за раз, которые просто работают; Я обычно развиваюсь небольшими шагами и каждый раз перезагружаю страницу в браузере.

Тем не менее, лучший способ избежать сложных для отладки представлений (или методов, или чего-либо еще) - это писать простые, короткие. Мое эмпирическое правило заключается в том, что я должен иметь возможность читать весь вид (или метод) в окне редактора, если это не просто HTML.

Всегда используйте помощников и частичные представления. Можете ли вы сосчитать более двух () или [] в строке вашего представления erb? Если да, используйте помощника.

Можете ли вы сосчитать более двух или трех блоков по вашему мнению? Используйте некоторые частичные.

3 голосов
/ 15 июня 2017

Не уверен, применимо ли это к этой проблеме, но, возможно, это кому-нибудь поможет. Я использую рельсы 5, и если вы положите

    <% debugger %>

в вашем файле html.erb он приостановит окно терминала, в котором работает ваш сервер rails. Оттуда вы можете отлаживать любые параметры или переменные, которые есть в вашем файле html.erb.

0 голосов
/ 11 июня 2019

В Rails 5 вы можете найти гем 'byebug' по умолчанию в 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

Затем вы можете использовать byebug на своем контроллере, помещать его в любое место и много раз, когда вам нужно, он работает как «точка останова» и, наконец, запустить ваш сервер $ rails server

class UsersController < ApplicationController
   byebug
end

В командной строке напишите справку для опций, обычно используйте букву 'c', чтобы перейти к следующей точке останова, или букву 'n', чтобы шаг за шагом продвигаться, и ctrl + d, чтобы выйти.

 (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)

Другая опция для отображения отладки (params): В файле app / views / layouts / application.html.erb под нижним колонтитулом рендеринга и выше укажите следующее:

<%= debug(params) if Rails.env.development? %>

Наконец, я поделюсь этими опциями, как я знаю, как новичок в Ruby on Rails. Надеюсь, это поможет.

Источник справки: https://rubyplus.com/articles/3631-Debugging-using-ByeBug-Gem-in-Rails-5

0 голосов
/ 29 августа 2009

В общем, ошибки Erb сообщают вам, где они произошли. Например, здесь ваша ошибка находится в строке 6 файла erb. Вы пропустили сообщение об ошибке, которое пришло с обратным следом, но оно обычно говорит вам, какую ошибку искать. Например, в моем простом тесте здесь:

NameError: undefined local variable or method `asdf' for main:Object
  from (erb):7
  from (irb):6

Достаточно ясно, что происходит и где.

Можете ли вы опубликовать дополнительную информацию о вашей ошибке и об ошибке, вызвавшей ее?

...