使用 Chef 运行所有 sql 文件

2023-12-11

你好,我需要帮助,我做了一个命令,应该读取 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 进行评估并将资源添加到资源集合中。除一些例外情况外,此阶段确实not改变系统的状态。所以给出你的食谱:

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 将仅使用last的值command属性。这是因为 Chef 分两个阶段执行(如前所述)。

在资源定义中使用条件逻辑和循环几乎总是会导致问题。在本例中,您需要编译命令outside的执行资源。您要执行的每个 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 中的假设)执行资源放入资源集合中,并按顺序执行它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Chef 运行所有 sql 文件 的相关文章

随机推荐

  • 如何创建具有 1 GB 堆的可执行 jar 文件

    我创建了一个类 它提供一个包含系统性能的文本文件作为输出 我想将它作为可执行文件罐 但是当我运行 Jar 时 我想将堆增加到 1 GB 如果我们运行这个程序 我可以通过这样的运行来做到这一点 java Xms1200m Xmx1300m S
  • 使用 Clearcase 创建标签

    我想通过明确指定从任何地方创建标签VOB姓名 不幸的是 无论我如何指定我的VOB我总是收到此错误 cleartool mklbtype global nc MyVOBName MY LABEL NAME cleartool Error In
  • 将类型传递给方法?

    我需要一些帮助来指明正确的方向 我想创建一个可以处理不同类型的方法 我需要以某种方式传递这些类型并以某种方式使用它们 任何关于这方面的指导都会很棒 这是方法 其中 TypeINeedToPassIn 是 是的 你猜对了 我需要传入的类型 p
  • 访问相同BLE外设的iOS应用程序:如何区分?

    我必须遵循以下场景 我的应用程序请求并接收来自 BLE 外设 血糖仪 的数据 用户可能安装了另一个应用程序 来自另一个开发人员 该应用程序也与外围设备通信 我注意到我的应用程序收到了由其他应用程序发起的请求的特征通知 这导致我的应用程序接收
  • 从 mediawiki 中的电子邮件生成文章

    我想发送一封电子邮件到 mediawiki 可以获取的地址 并让 mediawiki 接收它并从中生成一个新页面作为起点 更复杂的东西 比如类别 可以稍后再做 我在网上搜索了一下 没有发现任何明显的东西 我以前没有针对 mediawiki
  • Flutter:列表数据更改时 getx 控制器未更新。我如何确保 GetX 控制器知道添加的每个列表?

    我只是在步进器中有一个表单 有两个字段 名称 和 电子邮件 添加 按钮工作正常 并按预期将姓名和电子邮件添加到列表中 当我单击 保存 时 将打印 JSON 数据以及列表中的所有可用数据 Name first language Email f
  • jquery 中的图像本机宽度

    使用 jQuery 我可以在单击时更改图像的 src thumb li img click function var newlinkimage this attr src newlinkimage newlinkimage substrin
  • 如何获取当前登录grails的用户的id?

    我想显示有关登录用户的信息 例如注册期间给出的详细信息等 如何做到这一点 作为 grails 的新手 请帮忙 我正在使用 Spring 安全插件 那么您可以使用 springSecurityService 来获取控制器中的一些用户信息 cl
  • Net Core 2.0 AmazonServiceException:无法找到凭据

    我有以下代码 public void ConfigureServices IServiceCollection services AWS Options var awsOptions Configuration GetAWSOptions
  • 重新映射 org-shiftmetaright | org-shiftmetaleft 到 [shift-select-meta]left-word | [shift-select-meta]右词]

    有人可以帮我重新映射一下手吗org shiftmetaright org shiftmetaleft to shift select meta left word shift select meta right word 目标是在组织模式下
  • 如何从表中随机选择唯一的行对?

    我有两个这样的表 CREATE TABLE people id INT NOT NULL PRIMARY KEY id CREATE TABLE pairs person a id INT person b id INT FOREIGN K
  • Rust 相当于 Try-Catch 语句吗?

    是否可以在 Rust 中一次处理多个不同的错误 而不是单独处理而不使用额外的函数 简而言之 Rust 中相当于 Try Catch 语句的是什么 一个相似的feature早在2016年就有人提出过 但我不知道结果如何 例如 做这样的事情 t
  • 访问同一 DataFrame 列中的先前值

    这是我的代码 a pd DataFrame 1 2 3 4 5 6 7 8 9 10 columns A B print a a C 1 or np nan or is there a way to avoid this b lambda
  • 如何从 UWP 中的 IBuffer 或字节数组创建 IDirect3DSurface

    我想用一些内容创建一个视频RenderTargetBitmap在 UWP 中 我这样做是通过使用MediaClips From RenderTargetBitmap我可以得到一个IBuffer或像素字节数组 创建一个MediaClip我需要
  • Swift Codable 重用在不同模型结构/类之间共享的键子集

    我想知道是否有一种可行的方法可以通过使用自定义解码器初始化程序和 或多个容器和编码键来跨多个模型共享公共属性 这是我想要映射到相应的可编码模型的 JSON 对象 JSON 对象 我想要映射到的属性Codable is sprites 正如你
  • Azure 云服务上的 Microsoft.Jet.OLEDB.4.0 错误

    我的要求是将excel文件上传到网站根目录上的文件夹 然后将该文件的数据读取到数据表中 这在我现有的托管提供商上运行良好 但现在我已经将我的网站上传到 Windows Azure 云服务上 移植到 Azure 云服务后 我在 Microso
  • Matlab将向量转换为二进制矩阵[重复]

    这个问题在这里已经有答案了 我有一个大小为 m 1 的向量 v 其元素是从 1 n 中选取的整数 我想创建一个大小为 m n 的矩阵 M 如果 v i j 则其元素 M i j 为 1 否则为 0 我不想使用循环 只想将其实现为简单的向量矩
  • Groovy:Node.replaceNode 为 Node?

    假设我有一个节点想要替换为replaceNode 但是 我不想使用Builder做到这一点 或者更确切地说 我已经有了用来替换它的节点 replacement new XmlParser parse input xml root depth
  • 是否有用于访问给定部署的云功能的版本号的变量

    GCP 在控制台中显示已部署的云功能的版本号 目前还没有系统环境变量其中包含有关部署的信息 没有版本 也没有部署日期 鉴于版本更新需要相当长的时间来更新 30 秒以上 和传播 此类版本信息将很有用 最近发布的nodejs10运行环境现在包括
  • 使用 Chef 运行所有 sql 文件

    你好 我需要帮助 我做了一个命令 应该读取 sql dumps 文件夹内的所有 sql 文件 但它不起作用 这是我得到的 execute Run SQL Files do dirResults Dir glob tmp sql dumps