2012-12-18 6 views
19

Sto eseguendo Rails 3.2.6 in modalità sviluppo usando tmux. Quando faccio scorrere il buffer di output del server Rails (eseguo usando le barre s) usando tmux, il server si blocca e non elabora alcuna richiesta. Quando esco dalla modalità scrollback, il server riprende a funzionare correttamente.Rails si blocca durante la ricerca attraverso il buffer di output tmux

Come posso configurare il mio server per continuare a elaborare le richieste mentre guardo il buffer di output?

risposta

21

Se si desidera sospendere ed esaminare una determinata sequenza di messaggi di registro mentre il server continua a elaborare le richieste, è preferibile visualizzare direttamente i file di registro; potresti usare less -R log/development.log.

Mentre un riquadro tmux è in “modalità di copia” (la modalità utilizzata per visualizzare la storia di un riquadro), tmux non legge emesso dai processi in esecuzione in tty del riquadro. Se i processi continuano a scrivere l'output sul tty, il buffer tty del sistema operativo si riempirà. Quando un programma scrive su un tty con un buffer completo, provoca il blocco del processo in modo che il buffer non trabocchi; questo è il motivo per cui il server interrompe temporaneamente l'elaborazione delle richieste.

La timeline è simile al seguente:

  1. si entra in modalità di copia per vedere qualche vecchio uscita.
    tmux interrompe la lettura dal tty.
  2. Il server Rails continua a scrivere sul tty man mano che gestisce le richieste in corso.
    Il sistema operativo assorbe queste scritture in un buffer tty di dimensioni limitate.
  3. Eventualmente, il buffer del sistema operativo si riempie e causa ulteriori scritture sul tty da bloccare.
    Qui è dove il server Rails si "congela"; è bloccato in attesa che il SO ritorni da (ad esempio) a write (2) richiamato per visualizzare un messaggio di registro.
  4. Si esce dalla modalità copia.
    tmux riprende la lettura dal tty, svuotando l'output bufferizzato e accettando un nuovo output.
+1

Oltre a non utilizzare tmux, esiste un modo per aggirare questo problema? – justingordon

+0

@justingordon: se un programma in esecuzione in un riquadro * tmux * scrive abbastanza mentre il pannello è in "modalità copia", alla fine verrà bloccato. Se è necessario rivedere l'output di un processo chatty, long run è meglio inviare l'output a un file di log e usare qualcosa come 'less' per vederlo invece di usare la" modalità copia "di * tmux *. –

+0

L'esecuzione di txmux in iTerm2 è un modo per aggirare questo problema. – justingordon