我经营一家
hosted continuous integration公司,我们在Linux上运行客户代码.每次运行代码时,我们都会在单独的虚拟机中运行它.出现的一个常见问题是,客户的测试有时会因为在VM上检出其代码的目录顺序而失败.
让我详细介绍一下.在OSX上,HFS文件系统确保始终以相同的顺序遍历目录.使用OSX的程序员假设如果它在他们的机器上运行,它必须在任何地方工作.但它通常不适用于Linux,因为linux文件系统在遍历目录时不提供排序保证.
例如,考虑有2个文件,a.rb,b.rb. a.rb定义MyObject,b.rb使用MyObject.如果首先加载a.rb,一切都会正常工作.如果首先加载b.rb,它将尝试访问未定义的变量MyObject,并失败.
但比这更糟糕的是,它并不总是失败.因为Linux上的文件系统排序没有订购,所以它在不同的机器上将是不同的顺序.这更糟糕,因为有时测试通过,有时它们会失败.这是最糟糕的结果.
所以我的问题是,有没有办法使文件系统排序可重复.有些标志可能是ext4,它说它总是以某种顺序遍历目录?或者可能是一个具有此保证的不同文件系统?