2017-10-16 147 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