gpt4 book ai didi

mysql - Ruby mysql gem 'reconnect' 对象变量

转载 作者:行者123 更新时间:2023-11-29 14:22:36 27 4
gpt4 key购买 nike

在脚本运行一定时间后,我在 Ruby 中遇到“mysql 已消失”错误。

我想尝试告诉 mysql gem 在连接丢失时自动重新连接。

我当前的代码如下所示:

def self.connect()
begin
if !@@dbh.nil?
self.disconnect
end
@@dbh = Mysql.real_connect(@@server, @@user, @@pass, @@db)
puts "[+] Connected to the " + @@db + " database with user '" + @@user + "'"
rescue Mysql::Error => e
# log error
end
end

以下指南 [0] 说 mysql gem 有一个“重新连接”对象变量,但是,我不确定如何在我的代码中使用它。

如何在上面的代码中实现此选项?

提前致谢,瑞安

[0] http://www.tmtm.org/en/mysql/ruby/

编辑 ---

好的。我想我已经明白了。

我需要在 @@dbh = Mysql.real_connect(@@server, @@user, @@pass, @@db) 之后添加 @@dbh.reconnect = true 行。

注意:根据 IRC 上的“好”chapy 的说法,mysql gem 可能不是最好使用的 Ruby gem。

最佳答案

如果您要开始一个新项目,mysql2 gem 是要走的路。与旧版本相比,这是一个巨大的改进。

对您的示例进行 Ruby 化的尝试是:

def connect
begin
if (@dbh)
self.disconnect
end

@dbh = Mysql.real_connect(@server, @user, @pass, @db)
puts "[+] Connected to the #{@db} database with user '#{@user}'"
rescue Mysql::Error => e
# log error
end
end

使用传统@变量的原因是,如果您正确设计界面,则可以使用attr_accessor

使用单例实例比使用单例类更好。例如:

class MyApp
def self.db
@db ||= Database.new
end

class Database
# Instance methods like initialize, connect, disconnect, etc.
end
end

您可以这样使用:

MyApp.db.connect

使用类实例而不是直接使用类的优点是可以一次支持多个连接。

关于mysql - Ruby mysql gem 'reconnect' 对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11520245/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com