2012-08-22 14 views
7

Come si può sopprimere l'output di db: load: schema? EsecuzioneSoppressione dell'output in Rake Attività db: schema: carico

bundle exec rake db:schema:load 

con i -s, -q, o anche VERBOSE=false opzioni non fa alcuna differenza nel risultato; lo stesso cestino "create_table ... add_index ..." che non voglio vedere appare. Sto invocando questo da un task Rake personalizzato e non voglio che l'utente veda tutto questo ogni volta.

UPDATE:

ho risolto il problema con un orientamento da @Deefour utilizzando:

system "bundle exec rake db:schema:load -s RAILS_ENV=#{Rails.env} >NUL" 

>NUL è per le macchine Windows, Unix possono utilizzare > /dev/null.

piuttosto che

Rake::Task['db:schema:load'].invoke 

come avevo fatto nella mia attività personalizzata. Si noti che questa soluzione è specifica per le macchine Windows. Per le macchine basate su Unix, immagino che dovresti essere in grado di utilizzare la soluzione accettata di seguito.

+0

Come stai eseguendo il comando precedente nel file rake? – deefour

+0

Rake :: Task ['db: schema: load']. Invoke – aguazales

+3

Ho trovato che usare una chiamata 'system' separata era piuttosto lento, quindi dai un'occhiata a' quietly' o 'silence_stream' come consiglia @lightswitch. –

risposta

25

Ecco una soluzione detergente che funziona cross-system:

silence_stream(STDOUT) do 
    # anything written to STDOUT here will be silenced 
    Rake::Task["db:schema:load"].invoke 
end 

anche

quietly do 
    # anything written to STDOUT or STDERR here will be silenced 
    Rake::Task["db:schema:load"].invoke 
end 

preferisco silence_stream(STDOUT)-quietly perché sarà comunque consentire i messaggi di errore scritti STDERR di essere mostrato, che sarà utile quando il comando rake inizia ad agire.

Riferimenti: silence_stream, silence_warnings, & quietly

+0

Dannatamente geniale! Qualcosa di nuovo imparato tutti i giorni Cheers –

+0

Utile quando si testano anche le attività di rake.Rende molto più pulito l'output –

+0

entrambi 2 sono deprecati nelle rotaie 4.2 perché non sono thread safe –

3

Invece di chiamare l'attività con Rake::Task['...'].invoke, è possibile eseguire il comando in una subshell, reindirizzando l'output su /dev/null.

system "bundle exec rake db:schema:load > /dev/null 2>&1" 
+0

Quando l'ho fatto, invece dell'output di db: schema: load, veniva visualizzato "Il processo non può accedere al file perché è utilizzato da un altro processo", e 'db: schema: load' non è stato eseguito. – aguazales

+0

Puoi aggiungere alla tua domanda il resto del rake task che sta eseguendo 'db: schema: load'? – deefour

+0

Leggendo su '/ dev/null', mi sto rendendo conto che potrebbe esserti d'aiuto sapere che sono su una macchina Windows, non su Unix. : P – aguazales

Problemi correlati