2011-10-03 9 views
5

Tengo una aplicación escrita en Ruby usando Rails 2.3. Usamos ActiveRecord.¿Cómo determinar qué código de Ruby-on-Rails generó SQL?

Ocasionalmente, ActiveRecord genera algunos SQL bastante horriblemente ineficientes. Podemos determinar qué SQL es problemático utilizando registros de consulta lenta y usando new relic. Sin embargo, puede ser realmente difícil determinar la línea de código en nuestro software que generó el SQL problemático. En general, se trata de una consulta creada mediante asociaciones y named_scopes.

Lo que realmente me gustaría es una forma de etiquetar el SQL en nuestros archivos de registro con el nombre de archivo y la línea nuestro código que lo generó (no la línea de ActiveRecord que ejecutó la consulta).

La información debe estar disponible a través de la matriz de llamadas. No quiero volcar toda la matriz, solo quiero que el nombre de archivo y la línea de nuestro código sean los más directamente responsables. ¿Hay una gema que ya hace esto? Si no, ¿alguna sugerencia?

+1

Un compañero de trabajo sugirió que coloquemos el nombre de archivo y el número de línea (una vez que determinamos QUÉ son) en el SQL mismo como un comentario, en lugar de simplemente ponerlo en el archivo de registro de producción normal. De esta forma, el registro lento de consultas también tendría esta información. – ChrisInEdmonton

Respuesta

4

usted debe encontrar algo de inspiración a lo largo del active-record-query-trace joya

EDIT: wooops, leído demasiado rápido, esto es para RoR 3+. >This< seems to work for rails 2.3. También puede encontrar algo de inspiración here.

+0

Brillante! Gracias por referencia a la gema Rails 3. Es extraño que no sean más las personas que necesitan esto ... –

0

New Relic le proporcionará trazas de pila completas para consultas SQL lentas individuales con las características Slow SQL y Trazas de transacciones.

1

rack-mini-profiler incluye información sobre qué línea de código ruby ​​generó qué consulta sql.

Cuestiones relacionadas