如何抑制db:load:schema的输出?运行
bundle exec rake db:schema:load
使用-s
,-q
或甚至VERBOSE=false
选项的对输出没有影响;我不想看的相同的“create_table ... add_index ...”垃圾出现了。我在自定义Rake任务中调用它,我不希望用户每次都看到所有这些。
更新
我在@Deefour的一些指导下使用:
解决了这个问题system "bundle exec rake db:schema:load -s RAILS_ENV=#{Rails.env} >NUL"
>NUL
适用于Windows计算机,基于Unix的计算机可以使用> /dev/null
。
而不是
Rake::Task['db:schema:load'].invoke
正如我在自定义任务中所做的那样。请注意,此解决方案特定于Windows计算机。对于基于Unix的机器,我想你应该能够使用下面接受的解决方案。
答案 0 :(得分:26)
这是一个跨系统工作的更清洁的解决方案:
silence_stream(STDOUT) do
# anything written to STDOUT here will be silenced
Rake::Task["db:schema:load"].invoke
end
也
quietly do
# anything written to STDOUT or STDERR here will be silenced
Rake::Task["db:schema:load"].invoke
end
我更喜欢silence_stream(STDOUT)
到quietly
因为它仍会允许显示写入STDERR
的错误消息,这在rake命令开始执行时会很有用。
参考文献:silence_stream,silence_warnings,& quietly
答案 1 :(得分:4)
您可以在子shell中运行命令,将输出重定向到Rake::Task['...'].invoke
,而不是使用/dev/null
调用任务。
system "bundle exec rake db:schema:load > /dev/null 2>&1"