取消Rake任务数据库中的输出:schema:load

你怎么能抑制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 

就像我在自定义任务中所做的一样。 请注意,此解决scheme是特定于Windows机器。 对于基于Unix的机器,我想你应该能够使用下面接受的解决scheme。

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

 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) ,因为它仍然允许显示写入STDERR错误消息,这在rake命令开始执行时会很有帮助。

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

不要用Rake::Task['...'].invoke ,你可以在子shell中运行命令,将输出重定向到/dev/null

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