【问题标题】:Preventing an Instance Method from Printing to Console防止实例方法打印到控制台
【发布时间】:2016-03-04 15:25:52
【问题描述】:

我正在编写一个使用 mysql2 gem 的简单 Ruby 脚本。

为了正确终止与数据库的连接并避免Too many connections 错误,我将连接存储到变量mysql 中,如下所示:

mysql = Mysql2::Client.new(:host => hst, :username => usr, :password => pass, :database => db, :connect_timeout => 30)

然后我关闭连接:

mysql.close

当这种情况发生时,我得到:

closed MySQL connection

在控制台中。

如何实现实例方法#close 找到here 而不会在终端中显示closed MySQL connection?

【问题讨论】:

  • closed MySQL connection 实际上是一条错误消息。关闭连接后是否执行任何查询?
  • @stefan 这是一个循环,将retry 直到db 可以访问。那么closed MySQL connection 错误是什么意思呢?
  • 这意味着您正在尝试使用关闭的连接运行查询,例如mysql.close; mysql.query(...)
  • @stefan 你是 100% 正确的。谢谢。

标签: ruby mysql2 puts


【解决方案1】:

你可以这样做:

def silence_stdout
  $stdout = File.new( '/dev/null', 'w' )
  yield
  ensure
  $stdout = STDOUT
end

并使用该方法执行close

silence_stdout{mysql.close}

【讨论】:

  • 像魅力一样工作。感谢您的解决方案。
猜你喜欢
  • 2020-01-04
  • 2020-03-17
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多