我在Ruby中使用Mysql2客户端有一个奇怪的问题.尝试执行以下操作时:
client.query("CREATE DATABASE ...; INSERT INTO ..."); #SQL truncated for brevity
client.query("SELECT 1 FROM ...") #SQL truncated for brevity
Run Code Online (Sandbox Code Playgroud)
Ruby抛出一个错误,我正在选择的表不存在.但是,如果我尝试以下内容:
client.query("CREATE DATABASE ...; INSERT INTO ..."); #SQL truncated for brevity
sleep 1
client.query("SELECT 1 FROM ...") #SQL truncated for brevity
Run Code Online (Sandbox Code Playgroud)
查询没有问题.在我能够查询之前,似乎需要给MySQL服务器一些时间来加载数据.任何人都可以解释为什么会这样,以及如何在不使用睡眠的情况下以编程方式克服
更新
我初始化客户端如下:
Mysql2::Client.new({
:adapter => "mysql2",
:host => ip_address,
:username => db_username,
:password => db_password,
:flags => Mysql2::Client::MULTI_STATEMENTS
})
Run Code Online (Sandbox Code Playgroud)
我检查了'query_options'属性,async设置为false.我已经尝试显式设置async => false标志无效.
如果我使用,会发生同样的问题
Model.connection.execute(SQL HERE)
Run Code Online (Sandbox Code Playgroud)
注意,这都是在Rails单元测试中执行的.
谢谢
由于某种原因,唯一最终起作用并且不需要sleep 1中间的事情是:
@model = Model.new
Mysql2::Client.default_query_options[:connect_flags] |= Mysql2::Client::MULTI_STATEMENTS
@model.connection.reconnect!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |