Поиск…


Отладочное приложение Rails

Чтобы иметь возможность отлаживать приложение, очень важно понять поток логики и данных приложения. Это помогает решать логические ошибки и повышает ценность опыта программирования и качества кода. Двумя популярными камнями для отладки являются отладчик (для ruby ​​1.9.2 и 1.9.3) и byebug (для ruby> = 2.x).

Для отладки файлов .rb выполните следующие действия:

  1. Добавить debugger или byebug в группу development Gemfile
  2. Запустить bundle install
  3. Добавить debugger или byebug в качестве точки останова
  4. Запустить код или сделать запрос
  5. См. Журнал сервера rails, остановленный в указанной точке останова
  6. На этом этапе вы можете использовать свой серверный терминал так же, как rails console и проверить значения переменной и params
  7. Для перехода к следующей инструкции введите next команду и нажмите клавишу enter
  8. Для выхода из типа c и нажмите enter

Если вы хотите отлаживать файлы .html.erb , точка .html.erb будет добавлена ​​как <% debugger %>

Отладка в вашей среде IDE

Каждая хорошая среда IDE предоставляет графический интерфейс для интерактивной отладки приложений Ruby (и, таким образом, Rails), где вы можете добавлять точки останова, часы, автоматически приостанавливать выполнение исключения и позволяет выполнять выполнение кода поэтапно, по очереди.

Например, взгляните на одну из лучших Ruby IDE, функции отладки RubyMine на картинке

введите описание изображения здесь

Отладка Ruby on Rails Быстро + советы для начинающих

Отладка путем повышения исключений гораздо проще , чем щурясь через print заявления журнала, и для большинства ошибок, его намного быстрее , чем открытие КРП отладчик , как pry или byebug . Эти инструменты не должны быть вашим первым шагом.


Отладка Ruby / Rails быстро:

1. Быстрый метод: Поднимите Exception затем и .inspect его результат.

Самый быстрый способ отладки Ruby (особенно Rails) код для raise исключения по пути выполнения вашего кода при вызове .inspect на метод или объект (например , foo ):

raise foo.inspect

В приведенном выше коде raise вызывает триггеры Exception которые останавливают выполнение вашего кода , и возвращает сообщение об ошибке, которое удобно содержит .inspect информацию об объекте / методе (т.е. foo ) в строке, которую вы пытаетесь отлаживать.

Этот метод полезен для быстрого изучения объекта или метода ( например, это nil ? ) И для немедленного подтверждения того, что строка кода даже вообще выполняется в рамках данного контекста.

2. Запасной: Используйте рубиновый IRB отладчик как byebug или pry

Только после того, как у вас есть информация о состоянии вашего кодов потока выполнения вы должны рассмотреть вопрос о переходе на рубин драгоценный камень IRB отладчик , как pry или byebug , где вы можете углубиться в состояние объектов в пределах вашего пути выполнения.

Чтобы использовать камень byebug для отладки в Rails:

  1. Добавить gem 'byebug' внутри группы разработки в вашем Gemfile
  2. Запустить bundle install
  3. Затем, чтобы использовать, вставьте фразу byebug внутри пути выполнения кода, который вы хотите проверить.

Эта переменная byebug при ее byebug откроет рубиновый IRB-сеанс вашего кода, давая вам прямой доступ к состоянию объектов, поскольку они находятся в этой точке выполнения кода.

Отладчики IRB, такие как Byebug, полезны для глубокого анализа состояния вашего кода по мере его выполнения. Тем не менее, они более трудоемкие процедуры по сравнению с повышением ошибок, поэтому в большинстве ситуаций они не должны быть вашим первым шагом.


Общий совет для начинающих

Когда вы пытаетесь отладить проблему, рекомендуется всегда: читать сообщение об ошибке @ @ $ $ Error (RTFM)

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

  1. Какой класс ссылается на ошибку? (т. е. есть ли у меня правильный класс объекта или мой объект nil ? )
  2. Какой метод ссылается на ошибку? (т. е. является их типом в методе, можно ли вызвать этот метод для этого типа / класса объекта? )
  3. Наконец, используя то, что я могу сделать из моих последних двух вопросов, какие строки кода следует исследовать? (помните: последняя строка кода в трассировке стека не обязательно там, где проблема лежит.)

В трассировке стека обратите особое внимание на строки кода, которые приходят из вашего проекта (например, строки, начинающиеся с app/... если вы используете Rails). В 99% случаев проблема связана с вашим собственным кодом.


Чтобы проиллюстрировать, почему интерпретация в этом порядке важна ...

Например, сообщение об ошибке Ruby, которое путает многих новичков:

Вы выполняете код, который в какой-то момент выполняется как таковой:

@foo = Foo.new

...

@foo.bar

и вы получите сообщение об ошибке:

undefined method "bar" for Nil:nilClass

Начинающие видят эту ошибку и считают, что проблема в том, что bar методов не определена . Это не. В этой ошибке реальная часть имеет значение:

for Nil:nilClass

for Nil:nilClass означает, что @foo - это Nil! @foo не является переменной экземпляра Foo ! У вас есть объект, который является Nil . Когда вы видите эту ошибку, просто ruby ​​пытается сказать вам, что bar методов не существует для объектов класса Nil . (ну, так как мы пытаемся использовать метод для объекта класса Foo не Nil ).

К сожалению, из - за того , как эта ошибка записывается ( не undefined method "bar" for Nil:nilClass ) его легко получить обмануты, думая , эту ошибку нужно делать с bar является undefined . Когда вы не читаете внимательно, эта ошибка заставляет новичков ошибочно переходить к деталям метода bar на Foo , полностью упуская часть ошибки, которая подсказывает, что объект имеет неправильный класс (в данном случае: nil). Это ошибка, которую легко избежать, читая сообщения об ошибках полностью.

Резюме:

Всегда внимательно прочитайте все сообщение об ошибке перед началом любой отладки. Это означает: всегда проверяйте тип класса объекта в сообщении об ошибке сначала , а затем его методы , прежде чем приступать к любому стеку или строке кода, где, по вашему мнению, может возникнуть ошибка. Эти 5 секунд могут сэкономить вам 5 часов разочарования.

tl; dr: Не косоглазие в журналах печати: вместо этого выведите исключения. Избегайте кроличьих отверстий, тщательно читая ошибки перед отладкой.

Отладка приложения ruby-on-rails с помощью pry

pry - мощный инструмент, который можно использовать для отладки любого рубинового приложения. Настройка приложения ruby-on-rails с помощью этого драгоценного камня очень проста и понятна.

Настроить

Чтобы начать отладку приложения с помощью pry

  • Добавьте gem 'pry' в Gemfile приложения и Gemfile его
group :development, :test do
  gem 'pry'
end
  • Перейдите в корневой каталог приложения на консоль терминала и выполните bundle install . Вы все можете начать использовать его в любом месте приложения.

использование

Использование pry в вашем приложении просто включает binding.pry на контрольных точках, которые вы хотите проверить во время отладки. Вы можете добавить binding.pry точку останова в любом месте вашего приложения , которое интерпретируется рубиновым переводчиком (любое приложение / контроллеры, приложение / модель, приложение / файлы просмотры)

i) Отладка контроллера

приложение / контроллеры / users_controller.rb

class UsersController < ApplicationController
  def show
    use_id = params[:id]
    // breakpoint to inspect if the action is receiving param as expected
    binding.pry
    @user = User.find(user_id)
    respond_to do |format|
      format.html
    end
  end
end

В этом примере сервер rails приостанавливается с помощью штыревой консоли в точке разрыва при попытке посетить маршрутизацию страницы, чтобы show действие на UsersController . Вы можете проверить объект params и сделать запрос ActiveRecord на модели User с этой точки останова

ii) Отладка представления

приложение / просмотров / пользователей / show.html.haml

%table
  %tbody
    %tr
      %td ID
      %td= @user.id
    %tr
      %td email
      %td= @user.email
    %tr
      %td logged in ?          
      %td
        - binding.pry
        - if @user.logged_in?
          %p= "Logged in"
        - else
          %p= "Logged out"

В этом примере точка прерывания приостанавливается с помощью консоли pry, когда страница users/show предварительно скомпилирована на сервере rails, прежде чем отправлять ее обратно в браузер клиента. Эта точка прерывания позволяет отлаживать правильность @user.logged_in? когда это плохо.

ii) Отладка модели

app/models/user.rb

class User < ActiveRecord::Base    
  def full_name
    binding.pry
    "#{self.first_name} #{self.last_name}"
  end      
end

В этом примере точка прерывания может использоваться для отладки имени full_name экземпляра модели User full_name когда этот метод вызывается из любого места приложения.

В заключение, pry - мощный инструмент для отладки для приложения rails с простой настройкой и простой инструкцией по отладке. Попробуй.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow