2012-08-22 8 views
7

Jak można wyłączyć wyjście db: load: schema? UruchamianiePomijanie danych wyjściowych w trybie rake DB: schemat: ładowanie

bundle exec rake db:schema:load 

z -s, -q lub nawet VERBOSE=false opcji sprawia, że ​​nie ma różnicy w mocy; pojawia się ten sam "create_table ... add_index ..." śmieci, których nie chcę widzieć. Wzywam to od wewnątrz niestandardowego zadania Rake i nie chcę, aby użytkownik widział to wszystko za każdym razem.

UPDATE:

I rozwiązać problem z niektórych wskazówek od @Deefour za pomocą:

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

>NUL jest na komputerach z systemem Windows, Unix mogą korzystać > /dev/null.

zamiast

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

jak robił w moim niestandardowego zadania. Należy zauważyć, że to rozwiązanie jest specyficzne dla komputerów z systemem Windows. W przypadku maszyn opartych na Uniksie, wyobrażam sobie, że powinieneś być w stanie użyć akceptowanego rozwiązania poniżej.

+0

Jak masz uruchomiony powyższego polecenia w pliku natarcia? – deefour

+0

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

+3

Zauważyłem, że używanie oddzielnego wywołania 'system' było dość powolne, więc spójrz na użycie' cicho' lub 'silence_stream', jak @lightswitch poleca. –

Odpowiedz

25

Oto czystsze rozwiązanie, które działa cross-system:

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

także

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

wolę silence_stream(STDOUT) do quietly ponieważ będzie nadal pozwalają komunikaty o błędach zapisywane STDERR być pokazano, co będzie pomocne, gdy zacznie działać polecenie prowizji.

Referencje: silence_stream, silence_warnings, & quietly

+0

Coś wspaniałego! Coś nowego nauczyło się każdego dnia Pozdrawiam –

+0

Przydatny przy testowaniu zadań rake też Sprawia, że ​​wyjście jest dużo czystsze –

+0

oba 2 są przestarzałe w szynach 4.2 ponieważ nie są bezpieczne dla wątków –

3

Zamiast wywoływać zadanie z Rake::Task['...'].invoke, można uruchomić polecenie w podpowłoce, przekierowując wyjście do /dev/null.

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

Kiedy to zrobiłem, zamiast danych wyjściowych db: schema: load, wyświetliło się "Proces nie może uzyskać dostępu do pliku, ponieważ jest on używany przez inny proces", a 'db: schema: load' nie został uruchomiony. – aguazales

+0

Czy możesz dodać do pytania pozostałe zadanie rake'u, w którym wykonywany jest 'db: schema: load'? – deefour

+0

Czytanie na '/ dev/null', zdaję sobie sprawę, że może ci się przydać wiedzieć, że jestem na komputerze z systemem Windows, a nie na systemie Unix. : P – aguazales