2014-01-14 40 views
4

我有一個包含一段簡單的代碼來創建一個目錄,如果一個不存在的Rails應用程序。紅寶石FileUtils.mkpath行爲不同,在不同環境

FileUtils.mkpath(self.webapp_dir) unless File.exists?(self.webapp_dir) 

這種行爲我的開發工作站(OS X 10.9)的預期,但在部署到其他環境(紅帽4.4.6-3)我得到的錯誤。

在我的rails控制檯,我跑了以下內容:

FileUtils.mkpath('/path/to/my/project/public/web_apps/1') 

注意,第一次運行, '公共/ web_apps /' 存在,但 '1' 沒有。這成功了。我可以用已有的整個路徑重新運行它,並且每次都會成功無誤。

現在,我嘗試在生產環境中軌控制檯中運行相同的代碼。 'public/web_apps /'再次存在,但'1'不存在。在這種情況下,我得到一個錯誤。

FileUtils.mkpath('/path/to/my/project/public/web_apps/1') 
--> Errno::EEXIST: File exists - /path/to/my/project/public/web_apps 

有誰知道爲什麼這兩臺機器之間的行爲不同,而且我能做些什麼呢?我想我可以去通過檢查路徑中的每個目錄下,並創建只當它不存在,但是這是我早就預料mkpath做。

我發現之間的其他區別其他與文件系統的行爲(比如如何File.size不會立即文件寫入之後,除非你第一次打開它報告正確的值)互動如何運作。我一直沒能找到的行爲或者這些差異的任何文件在其他SO帖子沒有提到,雖然,我似乎保持絆腳石後,他們現在越來越有點沮喪。這是一個已知的事情,其他應用如何解釋這一點?

+1

是的Ruby版本a nd在兩個盒子中的補丁號碼完全相同? –

+0

是的,完全相同。 – Danny

+0

Ruby的哪個版本? – Beartech

回答

2

主人其實,這一切都是因爲,一個破碎的符號鏈接=(

所以web_apps實際上是一個符號鏈接,並沒有在我們的服務器上存在一個共享目錄。在我的dev的機器它確實存在,這是不可怕的明顯,由於「文件存在」錯誤。

我們的部署腳本正在建立的符號鏈接沒有檢查,如果該目錄確實存在。呸。

0

這看起來是一個權限問題,創建目錄,如果它們不存在,否則你不會得到任何錯誤。

看的'/path/to/my/project/public/web_apps/'