在Rake任务db:schema:load中抑制输出

agu*_*les 8 windows rake ruby-on-rails ruby-on-rails-3

如何抑制db:load:schema的输出?运行

bundle exec rake db:schema:load
Run Code Online (Sandbox Code Playgroud)

-s,-q或甚至VERBOSE=false选项使得在输出没有差别; 我不想看的相同的"create_table ... add_index ..."垃圾出现了.我从自定义Rake任务中调用它,我不希望用户每次都看到所有这些.

更新:

我使用@Deefour的一些指导解决了这个问题:

system "bundle exec rake db:schema:load -s RAILS_ENV=#{Rails.env} >NUL"
Run Code Online (Sandbox Code Playgroud)

>NUL适用于Windows机器,基于Unix可以使用> /dev/null.

而不是

Rake::Task['db:schema:load'].invoke
Run Code Online (Sandbox Code Playgroud)

正如我在自定义任务中所做的那样.请注意,此解决方案特定于Windows计算机.对于基于Unix的机器,我想你应该能够使用下面接受的解决方案.

lig*_*h05 27

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

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

quietly do
  # anything written to STDOUT or STDERR here will be silenced
  Rake::Task["db:schema:load"].invoke
end
Run Code Online (Sandbox Code Playgroud)

我喜欢silence_stream(STDOUT)quietly,因为它仍然会允许写入错误信息STDERR中显示,这将是有益的,当耙命令开始行动起来.

参考文献:silence_stream,silence_warnings,悄悄地

  • 如果都弃用了这些,是否有首选的替代方法?我仍然发现`silence_stream`对于使闲聊rake命令静音非常有用。 (2认同)