2017-10-16 2 views
1

J'essaye d'exécuter la commande ci-dessous Bloc Ruby de Chef et donner l'erreur ci-dessous.Ruby copier le fichier par extension

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)

Répondre

1

Très probablement vous avez besoin entre parenthèses pour la méthode Dir.glob, il prend juste le premier argument étant passé, et le reste, est considéré comme un argument FileUtils.cp_r, essayez avec:

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

Vous passez deux patterns argument à la méthode glob, c'est la raison de l'erreur:

no implicit conversion of String into Integer (TypeError)

Essayez d'utiliser simplement cp_r pour chaque motif, comme:

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 
) 

Je pense que votre objectif est de itérer obtenir les éléments dans

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

de sorte que vous pourrait itérer sur ces deux répertoires, et utiliser ce modèle dans t il Dir.glob méthode, comme:

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/' est le dossier dans lequel les éléments seront copiés, que vous êtes absent.

Ou dans le cas où vous souhaitez utiliser le dossier default_backup_path comme destination, vous n'avez pas besoin de la méthode Dir.glob, ajoutez simplement comme paramètre dest, en tant que chaîne

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

Merci pour vos conseils . J'ai essayé ceci et son me donnant une erreur disant "avait une erreur: TypeError: aucune conversion implicite de la chaîne en entier" – kkrrss

+0

Ainsi, l'erreur a changé, ne vous indique-t-elle pas à quelle ligne donne l'erreur? –

+0

Oui. mais c'est le même numéro de ligne. Je suis nouveau à Ruby ici. si peu de lutte avec ça. – kkrrss