我在Ruby中使用Mysql2客户端有一个奇怪的问题。尝试执行以下操作时:
client.query("CREATE DATABASE ...; INSERT INTO ..."); #SQL truncated for brevity
client.query("SELECT 1 FROM ...") #SQL truncated for brevity
Ruby抛出一个错误,我正在选择的表不存在。但是,如果我尝试以下内容:
client.query("CREATE DATABASE ...; INSERT INTO ..."); #SQL truncated for brevity
sleep 1
client.query("SELECT 1 FROM ...") #SQL truncated for brevity
查询没有问题。在我能够查询之前,似乎需要给MySQL服务器一些时间来加载数据。任何人都可以解释为什么会发生这种情况以及如何在不使用睡眠的情况下以编程方式解决这个问题?
更新
我将客户端初始化为:
Mysql2::Client.new({
:adapter => "mysql2",
:host => ip_address,
:username => db_username,
:password => db_password,
:flags => Mysql2::Client::MULTI_STATEMENTS
})
我检查了'query_options'属性,async设置为false。我试过明确设置async =>假旗无济于事。
如果我使用
,就会出现同样的问题Model.connection.execute(SQL HERE)
注意,这都是在Rails单元测试中执行的。
由于
答案 0 :(得分:0)
出于某种原因,唯一能够完成工作并且之间不需要sleep 1
的是以下内容:
@model = Model.new
Mysql2::Client.default_query_options[:connect_flags] |= Mysql2::Client::MULTI_STATEMENTS
@model.connection.reconnect!