2012-01-11 93 views
0

爲什麼我得到一個空的文件清單:爲什麼我的服務器的Rake FileList不工作​​?

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}\**\*") 

UPDATE AGAIN:它的工作原理,如果我把服務器:

//myserver/andsomepath 

和下載文件是這樣的:

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

如果你逃脫你的'DEPLOYMENT_PATH'斜線:'\\\\ myserver \\ anndsomepath' – Brian 2012-01-11 23:21:52

+2

「Ruby文件列表讓我瘋狂」不是一個很好的問題標題 - 我們不是合格的心理學家。 – 2012-01-11 23:23:56

+0

「問題」不適用於Ruby或Rake。這個「問題」在於Windows從世界其他地方向後做事。 Ruby *在Windows上工作*,但它的設計(感謝上帝)從* nix的角度來看。 – 2012-01-12 00:24:34

回答

1

如果你

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

編輯會發生什麼:我認爲紅寶石喜歡你做Unix風格的斜線,甚至當你在Windows上。我認爲基本原理是,即使在Windows上看起來很奇怪,在Unix和Windows上使用相同的代碼也更好。

TL;博士:如果有/但與\工作,那麼使用了什麼工作。

+0

沒有答案? 15char。 – 2012-01-11 23:23:17

+0

嘗試過,仍然沒有運氣 – icn 2012-01-11 23:23:47

+0

@icn:那麼你的字符串可能有問題,而不是FileList。 – 2012-01-11 23:25:14

0

因爲:

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

使用"\\**\\*"代替。

+0

用files = FileList.new(「#{DEPLOYMENT_PATH} \\\\ ** \\\\ *」)試過,不起作用 – icn 2012-01-11 23:27:10

2

紅寶石」 File.join設計與文件路徑打交道時,通過在系統無關的方式建立他們成爲你的幫手:

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

所以:

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

紅寶石確定文件路徑分離器通過感測操作系統,並應該自動提供正確的值。在Windows XP,Linux和Mac OS是:

File::SEPARATOR 
=> "/" 

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

雖然可以忽略幫手,它的存在,讓您的生活更輕鬆。因爲您正在使用服務器,所以您可能需要查看File::ALT_SEPARATOR,或者只需重新指定SEPARATOR並忽略警告,讓Ruby完成剩下的工作。

相關問題