3

我正在寻求一些帮助来定义我的厨师食谱中的优先级。

该配方应该在数据库中导入 sql 转储,然后对数据库执行 2 个 mysql 查询。

我正在使用 Chef Solo。

第一个 mysql_database 操作 :query 导入转储运行良好但其他 2 个查询似乎什么也没做,因为转储似乎仍在数据库中导入数据,运行时数据不存在。随机执行?

我的食谱:

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 在运行查询之前检查导入是否完成。

4

2 回答 2

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
于 2013-11-06T11:54:46.610 回答
1

您需要为正在执行的每个 sql 语句创建一个单独的 mysql_database 块。您不能在同一个查询中包含多个 sql 查询。

于 2013-09-19T12:02:20.983 回答