Prowadzę hostowaną firmę zajmującą się ciągłą integracją , a także kod naszych klientów w systemie Linux. Za każdym razem, gdy uruchamiamy kod, uruchamiamy go na osobnej maszynie wirtualnej. Częstym problemem, który się pojawia, jest to, że testy klienta czasami kończą się niepowodzeniem z powodu uporządkowania katalogu ich kodu wypisanego na maszynie wirtualnej.
Pozwól mi bardziej szczegółowo. W systemie OSX system plików HFS + zapewnia, że katalogi są zawsze przeglądane w tej samej kolejności. Programiści używający OSX zakładają, że jeśli działa na ich komputerze, musi działać wszędzie. Ale często nie działa w systemie Linux, ponieważ systemy plików Linux nie oferują gwarancji porządkowania podczas przeglądania katalogów.
Jako przykład rozważmy, że istnieją 2 pliki, a.rb, b.rb. a.rb określa MyObject
, a b.rb używa MyObject
. Jeśli a.rb zostanie załadowany jako pierwszy, wszystko będzie działać. Jeśli b.rb zostanie załadowany jako pierwszy, spróbuje uzyskać dostęp do niezdefiniowanej zmiennej MyObject
i zakończy się niepowodzeniem.
Ale gorsze jest to, że nie zawsze kończy się to niepowodzeniem. Ponieważ porządkowanie systemu plików w systemie Linux nie jest uporządkowane, na różnych komputerach będzie inna kolejność. Jest to gorsze, ponieważ czasami testy przechodzą pomyślnie, a czasem kończą się niepowodzeniem. To najgorszy możliwy wynik.
Moje pytanie brzmi więc, czy istnieje sposób na powtarzalność zamawiania systemu plików. Jakaś flaga do ext4, która mówi, że zawsze będzie przechodzić przez katalogi w określonej kolejności? A może inny system plików, który ma taką gwarancję?