Ruby on rails 抑制Rake任务db:schema:load中的输出

Ruby on rails 抑制Rake任务db:schema:load中的输出,ruby-on-rails,windows,ruby-on-rails-3,rake,Ruby On Rails,Windows,Ruby On Rails 3,Rake,如何抑制db:load:schema的输出?运行 bundle exec rake db:schema:load 使用-s,-q,甚至VERBOSE=false选项在输出中没有区别;出现了我不想看到的相同的“创建\u表…添加\u索引…”垃圾。我在自定义Rake任务中调用它,我不希望用户每次都看到所有这些 更新: 我在@Deefour的指导下通过以下方法解决了这个问题: system "bundle exec rake db:schema:load -s RAILS_ENV=#{Rails.en

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

bundle exec rake db:schema:load
使用
-s
-q
,甚至
VERBOSE=false
选项在输出中没有区别;出现了我不想看到的相同的“创建\u表…添加\u索引…”垃圾。我在自定义Rake任务中调用它,我不希望用户每次都看到所有这些

更新:

我在@Deefour的指导下通过以下方法解决了这个问题:

system "bundle exec rake db:schema:load -s RAILS_ENV=#{Rails.env} >NUL"
>NUL
适用于Windows计算机,基于Unix的计算机可以使用
>/dev/null

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

Rake::Task['db:schema:load'].invoke

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

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

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

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

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

我更喜欢
silence\u stream(STDOUT)
而不是
静默
,因为它仍然允许显示写入
STDERR
的错误消息,这在rake命令开始运行时会很有帮助


引用:,&

您是如何在rake文件中运行上述命令的?rake::Task['db:schema:load']。invokeI发现使用单独的
系统
调用非常慢,所以请看一下如何使用@lightswitch建议的
静默流
静默流,它显示“进程无法访问该文件,因为它正被另一个进程使用”,并且
db:schema:load
未运行。您能否将
db:schema:load
正在执行的rake任务的其余部分添加到您的问题中?请阅读
/dev/null
,我意识到让您知道我是在Windows计算机上,而不是在基于Unix的计算机上,这可能会有所帮助PI通过使用
system“bundle exec rake db:schema:load-s RAILS_ENV=#{RAILS.ENV}解决了我的问题>NUL
,但是你的回答引导了我正确的方向,所以我将其标记为正确。在测试rake任务时也很有用。使输出更干净。rails 4.2中不推荐使用这两个版本,因为它们在rails 5中不推荐使用线程安全。如果这两个版本都不推荐使用,有更好的选择吗?我仍然觉得
静默\u stream
非常有用l用于禁用闲聊的rake命令。