How can you suppress the output of db:load:schema? Running
bundle exec rake db:schema:load
with the -s
, -q
, or even VERBOSE=false
options makes no difference in the output; the same "create_table... add_index..." garbage that I don't want to see appears. I'm invoking this from inside a custom Rake task and I don't want the user to see all of this every time.
UPDATE:
I solved the problem with some guidance from @Deefour by using:
system "bundle exec rake db:schema:load -s RAILS_ENV=#{Rails.env} >NUL"
>NUL
is for Windows machines, Unix-based can use > /dev/null
.
rather than
Rake::Task['db:schema:load'].invoke
as I had been doing in my custom task. Note that this solution is specific to Windows machines. For Unix-based machines I imagine you should be able to use the accepted solution below.
Here is a cleaner solution that works cross-system:
silence_stream(STDOUT) do
# anything written to STDOUT here will be silenced
Rake::Task["db:schema:load"].invoke
end
also
quietly do
# anything written to STDOUT or STDERR here will be silenced
Rake::Task["db:schema:load"].invoke
end
I prefer silence_stream(STDOUT)
toquietly
because it will still allow error messages written to STDERR
to be shown, which will be helpful when the rake command starts to act up.
References: silence_stream, silence_warnings, & quietly
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With