2011-10-03 12 views
5

Ho un'applicazione scritta in Ruby usando Rails 2.3. Usiamo ActiveRecord.Come determinare quale codice di Ruby-on-Rails ha generato qualche SQL?

Occasionalmente, ActiveRecord genera un SQL piuttosto orribilmente inefficiente. Siamo in grado di determinare quale SQL è problematico utilizzando i registri di query lente e utilizzando new relic. Tuttavia, può essere veramente difficile determinare la linea di codice nel nostro software che ha generato l'SQL problematico. Generalmente è una query creata usando associazioni e named_scopes.

Quello che mi piacerebbe davvero piace è un modo per etichettare l'SQL nei nostri file di log con il nome del file e la linea di nostro codice che lo ha generato (non la linea di ActiveRecord che ha eseguito la query).

Le informazioni devono essere disponibili tramite l'array del chiamante. Non voglio scaricare l'intero array, voglio solo il nome del file e la linea del nostro codice più direttamente responsabile. C'è un gioiello che lo fa già? Se no, qualche suggerimento?

+1

Un collaboratore ha suggerito di inserire il nome file e il numero di riga (una volta determinati quali sono) nello stesso SQL come commento, piuttosto che inserirlo nel normale file di registro di produzione. In questo modo, il log delle query lente avrebbe anche queste informazioni. – ChrisInEdmonton

risposta

4

si dovrebbe trovare qualche ispirazione lungo la active-record-query-trace gemma

EDIT: wooops, leggerlo troppo veloce, questo è per RoR 3+. >This< seems to work for rails 2.3. È inoltre possibile trovare qualche ispirazione here.

+0

Brillante! Grazie per il riferimento alla gemma Rails 3. È strano che non ci siano più persone che hanno bisogno di questo ... –

0

New Relic fornisce tracce complete dello stack per singole query SQL lente con le funzioni Slow SQL e Tracce di transazione.

1

rack-mini-profiler include informazioni su quale riga di codice ruby ​​ha generato la query sql.

Problemi correlati