2017-10-16 145 views
1

我想执行下面的命令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: wrong number of arguments (given 3, expected 1..2)

回答

1

最可能的是,你需要括号为您Dir.glob方法,它采取只是第一个参数传递,剩下的,是被视为FileUtils.cp_r说法,尝试用:

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

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

no implicit conversion of String into 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}"

所以你可以迭代这两个目录,并在t中使用这个模式他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 
) 
+0

谢谢你的忠告。我试过这个,它给了我一个错误,说:“有一个错误:TypeError:没有将字符串隐式转换为整数” – kkrrss

+0

所以,错误已经改变了,是不是它指向哪一行给出错误? –

+0

是的。但它的行号相同。我是Ruby新手。所以一点点努力与此。 – kkrrss