2012-12-03 7 views
10

Sulla mia macchina RoR sviluppo di app (server locale, OSX 10.8.1, Ruby 1.9.3, Rails 3.2.8) qualcosa di strano ha iniziato ad apparire dal nulla (ovviamente ...):SystemStackError attivato dalla modifica dei file mentre il server è in esecuzione?

The Rails crolli dei server (tutti i percorsi vengono uccisi, riavvio del server è l'unico modo per farlo funzionare di nuovo) con le seguenti voci di registro:

SystemStackError (stack level too deep): 
    actionpack (3.2.8) lib/action_dispatch/middleware/reloader.rb:70 


    Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.9ms) 
    Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.2ms) 
    Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (14.7ms) 

googled e ha scoperto che lo SystemStackError è di solito a causa di un ciclo infinito, ma per quanto riguarda come posso rintracciarlo non ho un tale ciclo nel mio codice. E l'errore non sembra essere in una certa fase della logica dell'applicazione.

L'unica correlazione tra crash del server e le mie azioni è la seguente:

  1. Variazione po 'di codice in app
  2. ricaricare la pagina Web corrente del app
  3. Boom, server di andata messaggio, errore .
  4. Nessuna pagina funzionano dopo questo, l'errore è:

    Routing Errore

    Nessuna corrispondenza del percorso [Get] "/"

    provare a eseguire percorsi rake Per ulteriori informazioni sui percorsi disponibili.

Qualcuno può indicarmi la giusta direzione per eseguire il debug di questo, per favore? PS: Sospetto che sia successo dopo un "bundle update" incauto. Può essere?

+0

Quali gemme utilizzi? Stai monkeypatching qualcosa in ActiveSupport/ActiveDispatch/etc.? Inoltre quale versione patch di Ruby stai usando? – Novae

+0

Lo vedo su Rails 3.2.11 e ruby ​​1.9.3-p385. Gemenv: https://gist.github.com/coneybeare/4957822 Gemfile.lock: https://gist.github.com/coneybeare/4957828 – coneybeare

risposta

2

Il debug di un messaggio di errore stack level too deep in un rails app non è semplice, poiché l'errore potrebbe essere dovuto a una serie di motivi e il messaggio di errore non è di grande aiuto.

Alcune delle ragioni che portano a un stack level too deep error:

  1. Incoerenza nel gems & plugins and any other dependencies dell'applicazione.
  2. Code syntax error
  3. Incoerenza causata da applying db migrations erroneously.

Se l'errore stava accadendo all'avvio del sistema, allora questo suggerimento sarebbe molto utile: http://www.datatravels.com/technotes/2012/07/11/awesome-debugging-for-rails-boot-stacklevel-too-de/

Dalla descrizione, sembra che l'applicazione funziona bene per un po ', e poi inizia a schiantarsi - così il caso di avvio di cui sopra potrebbe non essere applicabile.

Un modo per andare circa capire il problema sarebbe di isolare la specifica line/block of code che sta causando l'errore utilizzando printf debugging

Inoltre, potrebbe essere utile rollback le modifiche e ricevendo il sistema a condizione di funzionamento, e quindi ripristinare le modifiche in modo incrementale per isolare la causa principale.

È molto probabile che lo bundle update abbia generato l'errore in questo caso; quindi sarebbe una buona idea controllare le dipendenze appena aggiunte e vedere se potrebbero essere il colpevole.

+0

Grazie per questa risposta. La cosa veramente strana è che sembra averpepn nel reloader, quando cambio un file localmente il server non capisce e sembra bloccarsi. Quando mi schiero su heroku questo non succede affatto. – danieldekay

+1

La distribuzione di Heroku impone il riavvio dei server; quindi probabilmente non è troppo sorprendente che l'errore non avvenga lì. L'app locale continua a funzionare correttamente dopo un riavvio? Oppure torna a non riuscire con lo stesso errore dopo un po '? –

+0

L'app locale funziona correttamente se non cambio alcun file "in un sistema in esecuzione". Era normale poter cambiare i file mentre l'app era in esecuzione, dovevo solo ricaricare la pagina web per arrivare alla nuova cosa. – danieldekay

Problemi correlati