У меня странная проблема с использованием клиента Mysql2 в Ruby. При попытке выполнить следующее:Ошибка 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 некоторое время для загрузки данных, прежде чем я смогу запросить его. Может ли кто-нибудь объяснить, почему это происходит и как программно преодолеть это, не используя сон?
Update
Я инициализация клиента, как так:
Mysql2::Client.new({
:adapter => "mysql2",
:host => ip_address,
:username => db_username,
:password => db_password,
:flags => Mysql2::Client::MULTI_STATEMENTS
})
Я проверил атрибут 'query_options' и асинхронный устанавливаются в ложь. Я попытался явно установить флаг async => false безрезультатно.
То же проблема возникает, если я использую
Model.connection.execute(SQL HERE)
Примечание, это все выполняется внутри теста Rails блока.
Благодаря
Похоже, вы 'autocommit' установлены правильно (' true'), но как-то со сбоем [async] (https://github.com/brianmario/mysql2#async) в [options] (https://github.com/brianmario/mysql2#cascading-config). Не могли бы вы либо опубликовать весь связанный с подключением код (начиная с 'Mysql2 :: Client.new'), либо проверить, установлен ли явный набор' client.query («CREATE ...»,: async => false) 'помогает? – mudasobwa
Вам не нужно вставлять никаких ожиданий. Мы широко используем MySQL и на полной скорости. Ours был установлен с использованием стандартного репо со стандартными настройками, однако мы используем ORK Sequel с драйверами mysql или mysql2. –
Я согласен, что это странно. Похоже, вы могли просто сбросить оба запроса в один вызов «client.query». – histocrat