我经营一家托管的持续集成公司,我们在Linux上运行客户的代码。每次运行代码时,我们都在单独的虚拟机中运行它。经常出现的问题是,由于在VM上签出的代码的目录顺序,客户的测试有时会失败。
让我更详细地讲。在OSX上,HFS +文件系统可确保始终以相同顺序遍历目录。使用OSX的程序员认为,如果OSX在其计算机上可以运行,则它必须在任何地方都可以运行。但是它通常在Linux上不起作用,因为linux文件系统在遍历目录时不提供顺序保证。
例如,考虑有两个文件a.rb,b.rb。a.rb定义MyObject
,而b.rb使用MyObject
。如果先加载a.rb,则一切正常。如果首先加载b.rb,它将尝试访问未定义的变量MyObject
,并失败。
但比这更糟糕的是,它并不总是会失败。由于未按顺序在Linux上对文件系统进行排序,因此在不同的计算机上将采用不同的顺序。情况更糟,因为有时测试通过,有时失败。这是最糟糕的结果。
所以我的问题是,有没有办法使文件系统的订购可重复。也许是ext4的标志,它表示它将始终以某种顺序遍历目录?还是其他具有此保证的文件系统?