Ruby扩展的副本文件

时间:2017-10-16 06:19:32

标签: ruby chef chef-recipe

我试图从Chef执行以下命令Ruby块并给出以下错误。

FileUtils.cp_r Dir.glob "#{node['default']['home']}/standalone/deployments/'*.ear'", "#{node['default']['default_backup_path']}/oms_bkp_#{time}", :noop => true, :verbose => true
  

ArgumentError:参数数量错误(给定3,预期1..2)

1 个答案:

答案 0 :(得分:1)

你的Dir.glob方法很可能需要括号,它只是传递第一个参数,其余的被认为是FileUtils.cp_r参数,试试:< / p>

FileUtils.cp_r(
  Dir.glob(
    "#{node['default']['home']}/standalone/deployments/'*.ear'", 
    "#{node['default']['default_backup_path']}/oms_bkp_#{time}"
  ),
  'destination/',
  noop: true,
  verbose: true
)

您正在向patterns方法传递两个glob参数,这就是导致错误的原因:

  

没有将String隐式转换为Integer(TypeError)

尝试对每种模式使用cp_r,例如:

FileUtils.cp_r(
  Dir.glob("#{node['default']['home']}/standalone/deployments/'*.ear'"), 
  'destination/',
  noop: true,
  verbose: true
)

FileUtils.cp_r(
  Dir.glob("#{node['default']['default_backup_path']}/oms_bkp_#{time}"),
  'destination/',
  noop: true,
  verbose: true
)

我认为你的目标是迭代获取

中的元素
  • "#{node['default']['home']}/standalone/deployments/'*.ear'"
  • "#{node['default']['default_backup_path']}/oms_bkp_#{time}"

所以你可以迭代这两个目录,并在Dir.glob方法中使用这个模式,如:

patterns = [
  "#{node['default']['home']}/standalone/deployments/'*.ear'", 
  "#{node['default']['default_backup_path']}/oms_bkp_#{time}"
]
patterns.each do |pattern|
  FileUtils.cp_r Dir.glob(pattern), 'destination/', noop: true, verbose: true
end

'destination/'是要复制元素的文件夹,而您将丢失。

如果您想使用default_backup_path文件夹作为目的地,那么您不需要Dir.glob方法,只需将其添加为dest参数,一个字符串

FileUtils.cp_r(
  Dir.glob("#{node['default']['home']}/standalone/deployments/'*.ear'"),
  "#{node['default']['default_backup_path']}/oms_bkp_#{time}",
  noop: true,
  verbose: true
)