как упорядочить выполнение запросов с помощью шеф-повара opscode и кулинарной книги базы данных

Я ищу помощь в определении приоритета в моем рецепте шеф-повара.

Предполагается, что рецепт импортирует дамп sql в базу данных, а затем выполняет 2 запроса mysql к базе данных.

Я использую Chef Solo.

Первое действие mysql_database: запрос, импортирующий дамп, работает хорошо. Но два других запроса, похоже, ничего не делают, поскольку кажется, что дамп все еще импортирует данные в БД, а данных нет при запуске. Случайное исполнение?

Мой рецепт:

mysql_database node['wp-dev']['database'] do
    connection ({:host => "localhost", :username => 'root', 
                 :password => node['mysql']['server_root_password']})
    #NOW THE SQL SCRIPT importing the dump - WORKING
    sql { ::File.open("/tmp/database.sql").read }
    #NOW THE 2 QUERIES - Not working at first Run
    sql "UPDATE WORKING QUERY WHEN COPIED IN MYSQL 1"
    sql "UPDATE WORKING QUERY WHEN COPIED IN MYSQL 2"
    action :query
end

Я не могу понять, как это исправить или как я могу работать с only_if, чтобы проверить, что импорт завершен, прежде чем запускать запросы.


person user2793488    schedule 19.09.2013    source источник
comment
где код sql?   -  person Netorica    schedule 19.09.2013
comment
это действительно простые запросы, я не думаю, что код sql является проблемой, так как сгенерированные запросы хорошо работают при копировании/вставке в mysql.   -  person user2793488    schedule 19.09.2013
comment
@ user2793488 у вас когда-нибудь было решение для этого?   -  person Aldo Reyes    schedule 25.01.2014
comment
Я столкнулся с теми же проблемами. Это вызвано задержкой закрытия соединения. Сами запросы в порядке (при использовании двух ресурсов БД). Я попытался установить базовую схему, а затем некоторые пользовательские данные. Второй запрос закрыл соединение перед первым запросом (вопрос: почему они используют 2 соединения?).. Это привело к тому, что mysql выполнил второе перед последним. Однако mysql_database_provider вызывает close в коде. Странная проблема, пока не исправили, пользоваться нельзя.   -  person hek2mgl    schedule 26.02.2014


Ответы (2)


Решение состоит в том, чтобы использовать разные блоки mysql_datase, чтобы один из них уведомлял другого о завершении.

mysql_database 'insertTestData' do
   connection mysql_connection_info
   database_name node['some']['database']
   sql { ::File.open(/somePath/testData.sql).read }
   action :nothing
end


mysql_database 'createTables' do
   connection mysql_connection_info
   database_name node['some']['database']
   sql { ::File.open(/somePath/tableCreate.sql).read }
   action :query
   notifies :query,"mysql_database[insertTestData]"
end
person Damien    schedule 06.11.2013

Вам необходимо создать отдельный блок mysql_database для каждого выполняемого оператора sql. Вы не можете иметь несколько запросов sql в одном и том же.

person Oin    schedule 19.09.2013
comment
Я тоже так делал, но у меня такая же проблема, блоки mysql_database вроде бы выполняются параллельно. Когда выполняется первый (импорт дампа), второй пытается выполнить запрос к базе данных, но импорт не завершен. Между тем несколько операторов sql, кажется, тоже работают: у меня есть исполняемый запрос в журнале. - person user2793488; 19.09.2013