我在规范(http://apidock.com/rails/Kernel/capture)上使用沉默方法。
例如,我想避免在此块上显示:
silence(:stdout) do
ActiveRecord::Tasks::DatabaseTasks.purge_current
ActiveRecord::Tasks::DatabaseTasks.load_schema_current
end
它工作得很好但是自从Rails 4以来它已经被弃用了。 由于它将在下一个版本中删除,我搜索替换但没有找到。
是否存在线程安全的东西?
是否存在替代品?
答案 0 :(得分:2)
没有取代它。注意到这不是线程安全的,这是我现在在spec_helper.rb
中所拥有的:
# Silence +STDOUT+ temporarily.
#
# &block:: Block of code to call while +STDOUT+ is disabled.
#
def spec_helper_silence_stdout( &block )
spec_helper_silence_stream( $stdout, &block )
end
# Back-end to #spec_helper_silence_stdout; silences arbitrary streams.
#
# +stream+:: The output stream to silence, e.g. <tt>$stdout</tt>
# &block:: Block of code to call while output stream is disabled.
#
def spec_helper_silence_stream( stream, &block )
begin
old_stream = stream.dup
stream.reopen( File::NULL )
stream.sync = true
yield
ensure
stream.reopen( old_stream )
old_stream.close
end
end
它不够优雅但有效。