Консоль класса Люкс

Опубликовано 05.04.2010

При работе с Rails-приложениями довольно много времени я провожу в консоли. Стандартный функционал, предоставляемый IRB по умолчанию, не сказать чтобы шибко богат. Вчера нашлось у меня немного свободного времени, чтобы улучшить свое скромное житие-бытие.

Настройки IRB-консоли задаются в файле .irbrc в домашней директории пользователя. Это по сути обычный ruby-файл, в нем можно подключать различные gem-ы, добавлять методы и т.д.

Вот несколько маленьких трюков для улучшения стандартной консоли, которые мне удалось раскопать (итоговый файл конфигурации см. в конце статьи):

  • wirble – добавляет посветку в стандартный вывод IRB и добавляет поддержку истории выполнения команд
  • awesome_print – позволяет выводить объекты на экран в удобном формате и с подсветкой. Использование в консоли:
    ap this_is_my_object
  • looksee – позволяет посмотреть список методов объекта, разбитый по классам/модулям, из которых эти методы происходят. Очень удобно при исследовании внутренностей классов и модулей фреймворка при отладке или разработке плагинов. Использование в консоли:
    lp this_is_my_object
  • Вывод лога SQL-запросов в консоль – при работе с моделями ActiveRecord все запросы к БД будут выводиться прямо на экран:
    show_log # включаем логи
    hide_log # выключаем логи
  • Замер скорости выполнения кода:
    time { ... }      # Код выполнится 1 раз
    time(100) { ... } # Код выполнится 100 раз
  • Выполнение SQL-запроса:
    sql "SELECT count(*) FROM users"

Надо сказать, работать в консоли стало в разы удобнее.

Итоговый файл .irbrc можно взять здесь

А вы используете какие-нибудь дополнения для IRB-консоли?

Подпишись и читай
Самые продвинутые ruby-программеры уже читают Rail0rz в формате RSS. Присоединяйся!
Комментарии
  1. Ptico05.04.2010

    Есть еще http://rubygems.org/gems/hirb — очень удобно, в виде табличек, отображает обьекты ОРМ. Поддерживает ActiveRecord, DataMapper, MongoMapper и еще наверное с десяток мапперов.

  2. Александр05.04.2010

    Я использую hirb для наглядного вывода большого количества объектов типа Post.all

  3. DM05.04.2010

    Как-то в одном из рейлскастов Райан показывал Hirb: http://github.com/cldwalker/hirb

  4. elv05.04.2010

    enable_log # включаем логи disable_log # выключаем логи

    Здесь опечатка, – д.б. showlog и hidelog соответственно

  5. DEkart05.04.2010

    Ptico, Александр, DM,

    hirb мне показался неудобным, awesome_print гораздо удобнее.

    elv, Да, действительно, спасибо. Поправил.

  6. michaeldv05.04.2010

    Полностью согласен с Dekart ;-)

  7. zed_0xff06.04.2010

    class Object # Return a list of methods defined locally for a particular object. Useful # for seeing what it does whilst losing all the guff that’s implemented # by its parents (eg Object). def local_methods(obj = self) (obj.methods - obj.class.superclass.instance_methods).sort end

    end

  8. yas07.04.2010

    Большое спасибо. Особенно про showlog и hidelog. Очень удобно получается. А то раньше как-то когда надо было видеть запросы, то использовал “tail -f файл_лога” и приходилось переключаться на соседнюю консоль. А вот так намного удобнее конечно. Спасибо! =)

    Я сейчас тоже использую hirb для вывода табличек, но awesome_print пожалуй попробую. wirble тож использую

  9. fl00r14.04.2010

    здорово, спасибо

  10. fl00r14.04.2010

    А что использовать для корректного отображения кириллицы в irb?

    “ыфвфы” => “\321\213\321\204\320\262\321\204\321\213”

  11. special K17.04.2010

    irb’ом я пользуюсь редко, особенно для рельс. Обычно в него пишешь какую-нибудь небольшую проверку чего-либо, и часто это приходится делать много раз, поэтому я пишу rake, а результат часто сохраняю в текстовый файл. Что же до самой консоли, то здесь я использую усовершенствования, а именно zsh. Тот же rake и т.п. становятся в гораздо удобнее. Однажды я хочу сделать полное автозаполнение для merb, но пока руки не доходят.

  12. vrybas21.04.2010

    Очень полезные фишки. Спасибо :)

  13. mikhailov27.04.2010

    awesomeprint и правда хорош, теперь не придется руками добавлять “y”(toyaml)