Dirijo uma empresa hospedada de integração contínua e executamos o código de nossos clientes no Linux. Cada vez que executamos o código, executamos em uma máquina virtual separada. Um problema frequente é que, às vezes, os testes de um cliente falham devido ao pedido de diretório de seu código verificado na VM.
Deixe-me entrar em mais detalhes. No OSX, o sistema de arquivos HFS + garante que os diretórios sejam sempre percorridos na mesma ordem. Os programadores que usam o OSX assumem que, se funcionar em sua máquina, deverá funcionar em qualquer lugar. Mas geralmente não funciona no Linux, porque os sistemas de arquivos linux não oferecem garantias de pedidos ao atravessar diretórios.
Como exemplo, considere que existem 2 arquivos, a.rb, b.rb. o a.rb define MyObject
e o b.rb usa MyObject
. Se a.rb for carregado primeiro, tudo funcionará. Se o b.rb for carregado primeiro, ele tentará acessar uma variável indefinida MyObject
e falhará.
Mas pior que isso, é que nem sempre falha. Como a ordem do sistema de arquivos no Linux não é solicitada, haverá uma ordem diferente em máquinas diferentes. Isso é pior, porque às vezes os testes passam e às vezes eles falham. Este é o pior resultado possível.
Portanto, minha pergunta é: existe uma maneira de tornar a ordenação do sistema de arquivos repetível. Alguma flag para ext4, talvez, que diz que sempre irá percorrer diretórios em alguma ordem? Ou talvez um sistema de arquivos diferente que tenha essa garantia?