Подтвердить что ты не робот

Ошибка Ruby mysql2 при выполнении операторов в быстрой последовательности

У меня странная проблема с использованием клиента Mysql2 в Ruby. При попытке выполнить следующее:

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 = > false безрезультатно.

Такая же проблема возникает, если я использую

Model.connection.execute(SQL HERE)

Обратите внимание, что все это выполняется из Rails unit test.

Спасибо

4b9b3361

Ответ 1

По какой-то причине единственное, что закончилось тем, что работало и не нуждалось в sleep 1 между ними, следующее:

@model = Model.new    
Mysql2::Client.default_query_options[:connect_flags] |= Mysql2::Client::MULTI_STATEMENTS
@model.connection.reconnect!