Почему этот глобус не работает для Rake FileList для моего сервера? - PullRequest
0 голосов
/ 12 января 2012

Почему я получаю пустой список файлов от:

  files = FileList.new("#{DEPLOYMENT_PATH}\**\*")

Где DEPLOYMENT_PATH равно \\myserver\anndsomepath

Как получить список файлов с такого сервера? Это проблема Ruby / Rake?

UPDATE

Я пытался:

  files = FileList.new("#{DEPLOYMENT_PATH}\\**\\*") 
  files = Dir.glob("#{DEPLOYMENT_PATH}\\**\\*") 
  files = Dir.glob("#{DEPLOYMENT_PATH}\**\*") 

ОБНОВЛЕНИЕ СНОВА: работает, если я поставлю сервер как:

 //myserver/andsomepath

и получите такие файлы:

  files = FileList.new("#{DEPLOYMENT_PATH}/**/*") 

Ответы [ 3 ]

2 голосов
/ 12 января 2012

Ruby 'File.join предназначен для того, чтобы быть вашим помощником при работе с путями к файлам, создавая их независимо от системы:

File.join('a','b','c')
=> "a/b/c" 

Итак:

DEPLOYMENT_PATH = File.join('', 'myserver', 'andsomepath')
=> "/myserver/andsomepath"

Ruby определяет разделитель пути к файлу, определяя ОС, и должен автоматически указывать правильное значение.В Windows XP, Linux и Mac OS это:

File::SEPARATOR
=> "/"

File.join(DEPLOYMENT_PATH, '**', '*')
=> "/myserver/andsomepath/**/*"

Хотя вы можете игнорировать помощника, он сделает вашу жизнь проще.Поскольку вы работаете с сервером, вы можете захотеть взглянуть на File::ALT_SEPARATOR или просто переназначить на SEPARATOR и игнорировать предупреждение, позволяя Ruby делать все остальное.

1 голос
/ 12 января 2012

Что произойдет, если вы сделаете

Dir.glob("#{DEPLOYMENT_PATH}\**\*")

Редактировать: Я думаю, что Ruby предпочитает делать слэши в стиле Unix, даже когда вы работаете в Windows.Я предполагаю, что логическое обоснование заключается в том, что один и тот же код лучше работает как в Unix, так и в Windows, даже если в Windows он выглядит странно.

tl; dr : если он работает с / но не с \, тогда используйте то, что работает.

0 голосов
/ 12 января 2012

Потому что:

 > "\*" == "*"
 => true 

Вместо этого используйте "\\**\\*".

...