2012-08-22 10 views
7

Wie können Sie die Ausgabe von db: load: schema unterdrücken? LaufenAusgabe in Rake-Task unterdrücken db: schema: load

bundle exec rake db:schema:load 

mit den -s, -q oder sogar VERBOSE=false Optionen macht keinen Unterschied in der Ausgabe; der gleiche "create_table ... add_index ..." Müll, den ich nicht sehen möchte, erscheint. Ich rufe dies aus einer benutzerdefinierten Rake-Aufgabe heraus, und ich möchte nicht, dass der Benutzer all dies jedes Mal sieht.

UPDATE:

ich das Problem mit etwas Anleitung von @Deefour gelöst durch die Verwendung:

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

>NUL ist für Windows-Maschinen, Unix-basierten > /dev/null verwenden können.

statt

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

wie ich hatte in meiner benutzerdefinierten Aufgabe gemacht haben. Beachten Sie, dass diese Lösung für Windows-Computer spezifisch ist. Für Unix-basierte Rechner stelle ich mir vor, Sie sollten die untenstehende akzeptierte Lösung verwenden können.

+0

Wie sind Sie mit dem obigen Befehl in Ihrer Rake-Datei? – deefour

+0

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

+3

Ich fand, dass die Verwendung eines separaten 'System'-Callouts ziemlich langsam war, also schau' ruhig 'oder 'silence_stream', wie @lightswitch es empfiehlt. –

Antwort

25

Hier ist eine saubere Lösung, die Cross-System funktioniert:

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

auch

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

I silence_stream(STDOUT)-quietly bevorzugen, weil es immer noch Fehlermeldungen STDERR geschrieben, damit zu sein gezeigt, die hilfreich sein wird, wenn der Rake-Befehl beginnt zu agieren.

Referenzen: silence_stream, silence_warnings, & quietly

+0

Gosh verdammt brillant! Etwas Neues gelernt jeden Tag. Prost. –

+0

Nützlich, wenn Rake-Aufgaben zu testen. Macht Ausgabe viel sauberer. –

+0

beide 2 sind in Schienen 4.2 veraltet weil sie nicht Thread-sicher –

3

Anstatt die Task mit Rake::Task['...'].invoke aufzurufen, können Sie den Befehl in einer Subshell ausführen und die Ausgabe an /dev/null umleiten.

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

Wenn ich das getan habe, anstatt der Ausgabe von db: schema: load, es angezeigt "Der Prozess kann nicht auf die Datei zugreifen, weil es von einem anderen Prozess verwendet wird", und "db: schema: load" nicht ausgeführt. – aguazales

+0

Können Sie Ihrer Frage den Rest der Rake-Aufgabe hinzufügen, in der das 'db: schema: load' ausgeführt wird? – deefour

+0

Wenn ich auf '/ dev/null' nachlese, merke ich, dass es hilfreich für Sie sein kann zu wissen, dass ich auf einer Windows-Maschine bin, nicht auf Unix. : P – aguazales

Verwandte Themen