home

Pry в rails console

21 Feb 2012

Чем больше проект, над которым ты работаешь, тем больше классов со всевозможными их методами, переменными и тд.
Зачастую, возникает сильная необходимость иметь “правильный” code completing в консоли. Или посмотреть прямо в класс, или посмотреть реализацию метода тобой же написанного пару месяцев назад класса. А часто и посмотреть документацию к тому или иному методу ядра ruby или библиотеки.
Существует множество расширений для стандартного irb, но я считаю, что если для какого-то инструмента расширений становится больше 3, и все они нужны, то пора задуматься – а нет ли чего-то другого, где все эти расширения уже есть?

Такая замена есть! Называется pry Рекомендую хотя бы просто попользоваться.
Ryan Bates сделал скринкаст на тему использования pry в rails. Но, к сожалению, мне он не понравился и я не считаю его особо полезным. Гораздо лучшее введение в pry есть от Josh Cheek. Замечательный веселый дядька, похож на Шнурова.
В общем, на этом можно было закругляться, тк в видео по ссылке Джош все объяснит тебе как и что, но для ленивых я еще укажу, что для того, чтобы pry стал полной заменой irb в rails console, надо внести гем pry в группу development в Gemfile (не думаю, что он понадобится в проде или на стейджах) вот так:

group :development do
  gem 'pry'
  gem 'pry-doc'
end

pry-doc пригодится, если понадобится посмотреть исходники методов ядра и либ ruby. Пара слов об этом. Т.к. всем известно, что MRI написан на C, и ты, допустим, плохо понимаешь код MRI, можно поставить себе rubinius и изучать внутренние механизмы ruby по нему.

Но я отвлекся. Итак, мы поставили себе pry, pry-doc. Теперь надо в config/environments/development.rb переписать стандартный irb на pry:

silence_warnings do
  require 'pry'
  IRB = Pry
end

После этого появится подсветка синтаксиса в консоли, куча удобных методов вроде append-line, а также удобный способ дебажить приложение, вставляя в проблемные места binding.pry, которые ведут себя как обычные breakpoint’ы.
Удач!

blog comments powered by Disqus