8

如何抑制 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 的机器,我想您应该能够使用下面公认的解决方案。

4

2 回答 2

27

这是一个跨系统工作的更清洁的解决方案:

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_streamsilence_warnings静默

于 2013-12-31T18:02:22.827 回答
4

Rake::Task['...'].invoke您可以在子 shell 中运行命令,而不是使用 调用任务,将输出重定向到/dev/null.

system "bundle exec rake db:schema:load > /dev/null 2>&1"
于 2012-08-22T19:43:31.567 回答