使用Chef运行所有sql文件

使用Chef运行所有sql文件,sql,ruby,chef-infra,Sql,Ruby,Chef Infra,你好,我需要帮助,我做了一个命令,应该读取sql_dumps文件夹中的所有sql文件,但它不工作。。这是我得到的 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" + dirRes

你好,我需要帮助,我做了一个命令,应该读取sql_dumps文件夹中的所有sql文件,但它不工作。。这是我得到的

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]
  end
end
我对ruby不是很熟悉。这是我收到的错误

 default: Errno::ENOENT
 default: -------------
 default: No such file or directory - Run_SQL_Files
 default:
 default: Resource Declaration:
 default: ---------------------
 default: # In /tmp/vagrant-chef-3/chef-solo-1/cookbooks/main/recip
 default.rb
 default:
 default: 214:
 default: 215: execute "Run_SQL_Files" do
 default: 216:   dirResults = Dir.glob("/tmp/sql_dumps/*.sql")
 default: 217:   var = 0
 default: 218:   while var < 15 do
 default: 219:     var = var + 1
 default: 220:     puts `mysql --user=root --password=toomba source
 {dirResults[var]}`
 default: 221:     puts dirResults[var]
 default: 222:   end
 default: 223:   #command "mysql --user=root --password=toomba < "
 iles
 default: 224: end

提前谢谢

这里有一个关于Chef如何编译资源的误解。您希望Chef执行该命令15次,但Chef不是这样操作的。Chef分两个阶段运行—执行阶段和编译阶段。在首先运行的编译阶段,将对Ruby进行评估,并将资源添加到资源集合中。除某些例外情况外,此阶段不会改变系统的状态。根据你的食谱:

执行Run_SQL_文件吗 dirResults=Dir.glob/tmp/sql_dumps/*.sql var=0 而var<15 var=var+1 命令mysql-user=root-password=toombasource+dirResults[var] 也已经试过了 命令mysql-user=root-password=toomba 执行Run_SQL_文件吗 命令mysql-user=root-password=toombasource/tmp/sql\u dumps/15.sql 终止 请注意,Chef只将最后一个值用于command属性。这是因为正如前面提到的,Chef分两个阶段执行

在资源定义中使用条件逻辑和循环几乎总是会导致问题。在本例中,您需要在execute资源之外编译命令。要执行的每个SQL命令都需要有自己的执行块。下面是一个简单的重构示例:

Dir[/tmp/sql_dumps/*.sql]。每个do|路径| 执行run_sql_{path}do 命令mysql-user=root-password=toomba<{path} 终止 终止
这将把OP执行资源中的15个假设放在资源集合中,并按顺序执行它们。

这里对Chef如何编译资源存在误解。您希望Chef执行该命令15次,但Chef不是这样操作的。Chef分两个阶段运行—执行阶段和编译阶段。在首先运行的编译阶段,将对Ruby进行评估,并将资源添加到资源集合中。除某些例外情况外,此阶段不会改变系统的状态。根据你的食谱:

执行Run_SQL_文件吗 dirResults=Dir.glob/tmp/sql_dumps/*.sql var=0 而var<15 var=var+1 命令mysql-user=root-password=toombasource+dirResults[var] 也已经试过了 命令mysql-user=root-password=toomba 执行Run_SQL_文件吗 命令mysql-user=root-password=toombasource/tmp/sql\u dumps/15.sql 终止 请注意,Chef只将最后一个值用于command属性。这是因为正如前面提到的,Chef分两个阶段执行

在资源定义中使用条件逻辑和循环几乎总是会导致问题。在本例中,您需要在execute资源之外编译命令。要执行的每个SQL命令都需要有自己的执行块。下面是一个简单的重构示例:

Dir[/tmp/sql_dumps/*.sql]。每个do|路径| 执行run_sql_{path}do 命令mysql-user=root-password=toomba<{path} 终止 终止
这将在资源集合中放置15个OP execute资源,并按顺序执行它们。

错误是什么?不工作不是一个问题描述对不起,我忘了,但我编辑了我的帖子!:错误是什么?不工作不是一个问题描述对不起,我忘了,但我编辑了我的帖子!: