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

时间:2012-08-22 18:44:04

标签: ruby-on-rails windows ruby-on-rails-3 rake

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

2 个答案:

答案 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_streamsilence_warnings,& quietly

答案 1 :(得分:4)

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

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