Как я могу профилировать запрос в Ruby on Rails?

Как я могу профилировать действие контроллера?

Один из моих взглядов занимает довольно много времени для рендеринга, и я хотел бы сломать его. Я вижу script/performance/profiler, но, похоже, имеет доступ только к глобальной области.

Ответ 1

ruby-prof - это путь. Здесь howto, Как профилировать ваши приложения Rails и Ruby с ruby-prof.

Если вы используете его в сочетании с инструментом визуализации, например kcachegrind, вы можете легко отделить код, который является кодом вашего приложения, от код рамки.

Я поговорил об этих инструментах в моей локальной группе пользователей Ruby некоторое время назад: Создание приложения для рельсов с помощью ruby-prof и kcachegrind.

Ответ 2

Консоль Ruby on Rails должна показать вам, какие частичные части занимают время рендеринга. Если этого недостаточно, вы можете установить новый реликвийный камень (https://github.com/newrelic/rpm) и использовать его в режиме разработчика, который даст вам обзор того, что происходит.

Если вы развертываете на Heroku, вы можете добавить бесплатную версию rpm, которая даст вам ту же статистику по вашему запущенному приложению.

Ruby имеет профилировщик (http://ruby-prof.rubyforge.org/), который покажет вам использование памяти, время вызова и т.д., но может быть сложно распространять ваш код из кода фрейма.

Ответ 3

У меня был некоторый успех с https://github.com/bhb/rack-perftools_profiler

Это позволит вам профилировать один или несколько запросов для любого из cputime, методов, распределений объектов или настенных часов и легко интегрировать их через промежуточное ПО Rack.