Ruby on rails 抑制Rake任务db:schema:load中的输出
如何抑制db:load:schema的输出?运行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
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命令。