我有一個包含一段簡單的代碼來創建一個目錄,如果一個不存在的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帖子沒有提到,雖然,我似乎保持絆腳石後,他們現在越來越有點沮喪。這是一個已知的事情,其他應用如何解釋這一點?
是的Ruby版本a nd在兩個盒子中的補丁號碼完全相同? –
是的,完全相同。 – Danny
Ruby的哪個版本? – Beartech