当前位置: 首页 > 面试题库 >

使用Chef运行所有sql文件

从智志
2023-03-14
问题内容

您好,我需要帮助,我做了一个命令,该命令应该读取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

我对红宝石不是很熟悉。这是我收到的错误

 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并将资源添加到资源集合中。也有一些例外,这个阶段也
不会 改变系统的状态。所以给你的食谱:

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

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

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}"
  end
end

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



 类似资料:
  • 问题内容: 我需要将所有.html文件都作为.php文件运行,而在明天的演示文稿发布之前,我没有时间更改所有链接。有什么办法可以用我的Apache服务器对其进行“破解”吗? 问题答案: 在网站的根目录中创建一个.htaccess文件,并添加以下行: [Apache2 @ Ubuntu / Debian:使用此指令] 或者,从下面的评论中: 如果您将PHP作为CGI运行(可能不是这种情况),则应改为

  • 我有一个Java应用程序,它使用Gradle作为构建系统。这是多项目构建(几个Java项目)。 当我运行时,有些测试失败了,我注意到并不是所有的测试都在运行。 如果我将以下代码添加到中,它确实会运行所有测试,但当然,构建的代码总是成功完成: 我有两个问题: gradle是否在第一次失败后停止执行测试? 是否有一种方法可以运行所有测试(即使在一些测试失败时),并且如果其中一些测试失败,构建的测试仍然

  • Chef 是一个系统集成框架,为整个架构提供配置管理功能,有了 Chef 你可以: Manage your servers by writing code, not by running commands. (via Cookbooks) Integrate tightly with your applications, databases, LDAP  directories, and more

  • 我有一堆功能文件(大约15个),其中每个功能文件都有一个线程,需要睡眠至少3分钟(对于一些复杂的后台应用程序,需要执行一些功能)。我需要一种并行执行它们的方法。 我有一个简单的CucumberRunnerTestCLass。 非常感谢您的帮助。谢谢

  • Navicat 让你使用 转储 SQL 文件 和 运行 SQL 文件 功能还原你的数据库或模式或表。 要备份数据库或模式或表,在上右击并从弹出菜单选择 转储 SQL 文件 -> 结构和数据 或 僅结构。要还原数据库或模式或表或运行 SQL 文件,右击并从弹出菜单选择 运行 SQL 文件。 提示:你可以拖曳一个 .sql 文件到表的对象列表窗格或到连接窗格的表或模式。Navicat 将弹现 运行 S

  • 支援 Gulp 4.0,允许嵌套配置任务及组态。以优雅、直觉的方式,重复使用 gulp 任务。 编码的时候你遵守 DRY 原则,那编写 gulpfile.js 的时候,为什么不呢? 功能 支援 Gulp 4.0, 自动载入本地 recipe, 支援透过 npm 安装 plugin, 支援嵌套任务并且允许子任务继承组态配置, 支援向前、向后参照任务, 透过组态配置即可处理串流:譬如 merge, q