10
在Ruby中使用Mysql2客户端时出现了一个奇怪的问题。当试图执行以下操作时:快速连续执行语句时出现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' 属性和异步设置为false。我已经尝试明确设置async => false标志无济于事。
同样的问题发生,如果我用
Model.connection.execute(SQL HERE)
注意,这是所有从Rails的单元测试中执行。
感谢
它看起来像你'autocommit'正确设置(TRUE; ),但在[options](https://github.com/brianmario/mysql2#cascading-config)中[async](https://github.com/brianmario/mysql2#async)以某种方式混乱。你可以发布所有与连接有关的代码(以'Mysql2 :: Client.new'开始),还是检查显式集合'client.query(“CREATE ...”,:async => false)'是否有帮助? – mudasobwa 2013-02-17 00:30:14
您不需要插入任何等待。我们广泛使用MySQL,并且全速运转。我们使用标准回购安装了标准设置,但是我们使用Sequel ORM与mysql或mysql2驱动程序。 – 2013-02-17 06:10:55
我同意这很奇怪。它看起来像你可以将这两个查询合并为一个多语句“client.query”调用。 – histocrat 2013-03-05 22:10:50