18 votos

Asegurar un directorio repetido pedidos en linux

Tengo un alojado de integración continua de la empresa, y realizamos nuestros clientes código en Linux. Cada vez que se ejecute el código que se ejecute en una máquina virtual independiente. Un problema frecuente que se presenta, es que un cliente pruebas a veces no a causa del directorio de pedidos de su código comprobado en la máquina virtual.

Déjame entrar en más detalles. En OSX, el sistema de archivos HFS+ asegura de que los directorios están siempre atravesadas en el mismo orden. Los programadores que usan OSX asumir que si funciona en su máquina, se debe trabajar en todas partes. Pero a menudo no funciona en Linux, ya que linux los sistemas de archivos no ofrecen garantías de orden, al moverse por los directorios.

Como un ejemplo, considere hay 2 archivos, un.rb, b.rb. una.rb define MyObject, y b.rb utiliza MyObject. Si una.rb se carga por primera vez, todo va a trabajar. Si b.rb se carga por primera vez, se intenta acceder a una variable no definida MyObject, y del error.

Pero peor que esto, es que no siempre acaba de fallar. Porque el sistema de archivos de pedidos en Linux no está ordenado, va a ser un orden diferente en diferentes máquinas. Esto es peor porque a veces la fase de pruebas, y a veces fallan. Este es el peor resultado posible.

Así que mi pregunta es, hay alguna manera de hacer que el archivo de sistema de pedidos repetible. Algunos flag a ext4 tal vez, que dice que siempre va a recorrer directorios en un poco de orden? O tal vez un sistema de archivo diferente que tiene esta garantía?

16voto

Celada Puntos 3781

Sé que no es la respuesta que usted está buscando, pero creo que la solución correcta es evitar según el orden de los archivos en un directorio. Tal vez es siempre consistente a través de todos los HFS+ sistemas de ficheros, y tal vez usted podría encontrar una manera de hacer que sea coherente en ext4 o algún otro sistema de ficheros, pero le costará más problemas en el largo plazo que va a guardar. Alguien utiliza tu aplicación se ejecutará en una desagradable sorpresa cuando no se dan cuenta de que es sólo compatible con algunos tipos de sistemas de ficheros y otros no. El orden puede cambiar si un sistema de archivos es restaurar desde copia de seguridad. Es probable que ejecutar en problemas de compatibilidad porque el HFS+ orden coherente y ext4, consistente orden puede no ser el mismo.

Acabo de leer todas las entradas de directorio y ordenar la lista lexicográficamente antes de usarlo. Como ls .

Usted menciona archivos a.rb y b.rb, pero si estamos hablando del lenguaje de programación de archivos de código fuente, no debería de cada archivo ya será responsable de garantizar que las importaciones de todas sus dependencias?

6voto

Tom Puntos 720

El POSIX llamada en Linux readdir() no es garantía de cualquier ordenación coherente. Si usted desea ordenó resultados, la aplicación que es el manejo de archivos es responsable de ordenar, como se presentan a las llamadas a las funciones.

http://stackoverflow.com/questions/8977441/does-readdir-guarantee-an-order

Ahora, ya se dijo que este era su cliente de código y no se puede arreglar, usted podría alterar los vinculados a las bibliotecas que se utilizan para proporcionar una consistente readdir() la llamada. Que iba a llevar algo de trabajo y ser digna de su propia pregunta. Para una referencia rápida, consulte http://www.ibm.com/developerworks/linux/library/l-glibc/index.html.

La alteración de este pueden originar algunos otros con toda la serie de problemas que no puede ser capaz de prever. Se le advirtió, pero puede ser una solución si su cliente no puede ser educado correctamente.

1voto

Paddy3118 Puntos 101

Educar a su cliente que existe una dependencia de orden inherente que debe indicarse explícitamente. Ofrecen a ayudar al cliente a expresar la dependencia de tal manera que una compilación funciona en todos los sistemas y que el cliente adopte el flujo cambiante que capta la dependencia de la orden de compilación.

Si el cliente quiere ser capaz de compilar en otras máquinas sería grosero de que piensen que se trata de forma gratuita.

1voto

Yup Puntos 1

Moderna de Linux (ext4) añade un índice B-tree para las listas de archivos. Uno de sus efectos es archivos predeterminados orden depende de un hash de sus nombres.

Para deshabilitar el uso de esta característica:

tune2fs - O ^ dir_index

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: