2012-01-03 7 views
51

Quando eseguo caposquadra ricevo il seguente:caposquadra mostra solo linea con “ha iniziato ingegno pid #” e nient'altro

> foreman start 
16:47:56 web.1  | started with pid 27122 

Solo se mi fermo esso (tramite ctrl-c) mi mostra ciò che manca :

^CSIGINT received 
16:49:26 system | sending SIGTERM to all processes 
16:49:26 web.1  | => Booting Thin 
16:49:26 web.1  | => Rails 3.0.0 application starting in development on http://0.0.0.0:5000 
16:49:26 web.1  | => Call with -d to detach 
16:49:26 web.1  | => Ctrl-C to shutdown server 
16:49:26 web.1  | >> Thin web server (v1.3.1 codename Triple Espresso) 
16:49:26 web.1  | >> Maximum connections set to 1024 
16:49:26 web.1  | >> Listening on 0.0.0.0:5000, CTRL+C to stop 
16:49:26 web.1  | >> Stopping ... 
16:49:26 web.1  | Exiting 
16:49:26 web.1  | >> Stopping ... 

Come si risolve?

+0

Se aprite che richiedono l'intero rotaie stack, potrebbe volerci un po 'per lanciare tutto. L'output del caposquadra è istantaneo, ma i tuoi lavori in background non saranno più veloci del solito. Nel mio caso, ho dovuto aspettare circa 2 minuti. Quindi ... aspettalo. –

risposta

47

Sono stato in grado di risolvere il problema da 2 modi diversi:

  1. Da https://github.com/ddollar/foreman/wiki/Missing-Output:

    Se non si è visto alcun output dal programma, v'è un probabile possibilità che stia bufferizzando. Ruby buffer di default per default. Per disabilitare questo comportamento, aggiungere questo codice il più presto possibile nel programma :

    # ruby 
    $stdout.sync = true 
    
  2. Installando caposquadra tramite il heroku toolbelt package

Ma io ancora non so cosa sta succedendo né perché questo 2 modi sopra risolvesse il problema ...

+0

Questo è super utile !! – Cyrus

+5

+1 - Grazie mille! Per @Earle Clubb di seguito, ho aggiunto la riga '$ stdout.sync = true' al mio file' config/environments/development.rb' e funziona perfettamente! –

+2

Ora solo l'1 funziona. Può essere usato in secondo luogo quando Heroku Toolbelt ha una versione precedente di Foreman. – Saneef

4

Ho lo stesso problema (rubino 1.9.3-p0, rotaie 3.2rc2, OSX 10.7).

Risolto il problema utilizzando foreman-0.27.0 aggiungendo questa riga nel mio Gemfile.

gem 'foreman', '0.27.0' 
+0

Il mio ha funzionato quando ho installato il "caposquadra più generale" dal pacchetto heroku toolbelt. Quello delle gemme non lo ha ... – ijverig

4

Ho anche avuto lo stesso problema ma con una soluzione diversa. (Rubino 1.9.2p290, Rails 3.1.0, ubuntu 10.04.3)

ho cambiato la linea nel mio Procfile da:

web: bundle exec thin start -p $PORT 

a:

web: bundle exec rails server thin -p $PORT 

e non è più dato io un problema

+0

No. Non ha funzionato. Mi mostra un messaggio INFO su webrick, ma mostra ancora solo l'avvio messaggio dopo un ctrl-c ... – ijverig

+0

Questo funziona per me (OSX 10.8, caposquadra 0.60.2), grazie – grilix

+0

Non funziona anche per me, si ottiene lo stesso errore –

14

"Foreman visualizzerà sull'output del terminale qualsiasi cosa scritta sullo stdout dai processi che avvia." - ddollar Vedere foreman-issues#57

BTW, è possibile utilizzare tailf in Procfile per vedere i registri

web: bundle exec rails server thin -p $PORT 
log: tail -f log/development.log 

Suggerimento: tailf non esiste in OSX, utilizzando tail -f -n 40 log/opere development.log.

+1

Questo serve allo stesso scopo ma non lo fa cambiano che le rotaie non stiano ancora scaricando i buffer per me per qualche ragione.Quando eseguo 'rails console' ed eseguo STDOUT.sync, restituisce true, quindi dovrebbe essere scarico, ma il caposquadra non sta ancora scrivendo nulla dal worker – jrbalsano

+2

Rails ** only ** svuota le scritture nel file di log al termine della richiesta di rack successiva, viene gestito dal middleware Rails :: Rack :: Logger. Di quale operatore parli? Resque redis? – julionc

+0

Spiacente, per lavoratore intendevo la coda -f che è in esecuzione. Non sono sicuro del perché, ma ho sicuramente avuto un ambiente di sviluppo in cui il web stava scrivendo tutti i messaggi che attualmente sto vedendo in output dal registro. – jrbalsano

20

La mia soluzione era mettere $stdout.sync = true nella parte superiore di config/environments/deve lopment.rb.

Quindi tutto ciò che carica l'ambiente di sviluppo (incl. Thin) non bufferizza lo stdout.

4

Se si sta utilizzando Foreman per eseguire un progetto Python, piuttosto che un progetto Ryby, e si sta verificando lo stesso problema, ecco alcune soluzioni per voi. Se si utilizza un Procfile per invocare il pitone CLI direttamente, quindi è possibile utilizzare l'opzione '-u' per evitare il buffering stdout:

python -u script.py 

Se si utilizza un Procfile per gestire un server WSGI, come ad esempio invocando gunicorn, boccetta, bottiglia, vigilia, ecc, quindi è possibile aggiungere un file ".env" alla radice del proprio progetto di pitone, che contiene i seguenti: più attività

PYTHONUNBUFFERED=True