使用Chef运行所有sql文件

使用Chef运行所有sql文件,第1张

使用Chef运行所有sql文件

这里有一个关于Chef如何编译资源的误解。您期望Chef执行15次命令,但这不是Chef的 *** 作方式。Chef运行于两个阶段,即执行阶段和编译阶段。在编译阶段(首先运行),将评估Ruby并将资源添加到资源集合中。也有一些例外,这个阶段也
不会 改变系统的状态。所以给你的食谱:

execute "Run_SQL_Files" do  dirResults = Dir.glob("/tmp/sql_dumps/*.sql")   var = 0  while var < 15 do    var = var + 1     command "mysql --user=root --password=toomba source" + dirResults[var]    # Already tried this also    # command "mysql --user=root --password=toomba < "  dirResults[var]    puts dirResults[var]  endend

这在功能上等同于这样编写的配方(在编译阶段完成之后)”

execute "Run_SQL_Files" do  command "mysql --user=root --password=toomba source /tmp/sql_dumps/15.sql"end

请注意,Chef仅将利用该属性的 最后一个

command
。这是因为Chef在两个阶段中执行(如上所述)。

在资源定义中使用条件逻辑和循环几乎总是会引起问题。在此示例中,您需要在execute资源 之外
编译命令。您要执行的每个SQL命令都必须具有自己的

execute
块。这是一个简单的重构示例:

Dir["/tmp/sql_dumps/*.sql"].each do |path|  execute "run_sql_#{path}" do    command "mysql --user=root --password=toomba < #{path}"  endend

这会将15个(从OP假定)执行资源放入资源集合中,并按顺序执行它们。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5620438.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存