抑制产出rake任务分贝:模式:负载(Suppress Output in Rake Task db

2019-06-27 06:44发布

你怎么能抑制分贝的输出:负载:架构? 运行

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的机器我想你应该可以使用下面的接受的解决方案。

Answer 1:

这里是能跨系统清洁的解决方案:

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中显示,这将是有益的,当耙命令开始行动起来。

参考文献: silence_stream , silence_warnings ,与静静



Answer 2:

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

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


文章来源: Suppress Output in Rake Task db:schema:load