Un juego de atención al cliente sobre sensibilidad a mayúsculas y minúsculas
Mi sitio web del blog está alojado en el servicio en la nube de Netlify. Hace un tiempo, había un error extraño que impedía que el sitio publicara actualizaciones. Este error solo ocurría en Netlify, no en mi propia Mac. El mensaje de error en Netlify se veía así:
Lo extraño es que este error no siempre ocurría—9 de cada 10 veces habría un error, pero 1 vez no lo habría. Busqué el error durante mucho tiempo pero no pude encontrarlo. Finalmente, no tuve más remedio que publicar en el foro de Netlify.
Aproximadamente un día después, alguien proporcionó un enlace a una conexión persona a persona—espera, quiero decir un “enlace de hilo de discusión”. De todos modos, pensaron que mi mensaje de error era similar al mensaje de error mencionado en este hilo y me sugirieron que probara las sugerencias del hilo, que era modificar la versión de la biblioteca referenciada, es decir, modificar el archivo package.json.
Hice clic en el enlace y miré el hilo. Juzgué que mi error probablemente no estaba relacionado con la versión de la biblioteca referenciada. Sin embargo, había alguien en el hilo que lo solucionó cambiando Layout.js a layout.js en su archivo. Aunque este método no funcionó para otros en el hilo, este método llamó mi atención y seguí esta pista.
Sensibilidad a mayúsculas y minúsculas
Me saltaré el proceso de excavación. Al final, resolví el caso. La razón era que tanto Mac como Windows son insensibles a mayúsculas y minúsculas por defecto (los nombres de archivo no distinguen entre mayúsculas y minúsculas). Por ejemplo, ya sea que guardes un archivo como seo o Seo, se consideran iguales. Entonces, en tu propio sistema, si tu código importa un archivo llamado Seo pero el nombre real del archivo es seo, es posible que no cause problemas durante la fase de construcción. Sin embargo, cuando lo despliegas en Netlify, causará problemas.
Cuando Netlify construye un sitio web, usa un sistema Linux. Los sistemas Linux o Unix, o plataformas como GitHub que almacenan código fuente, son sensibles a mayúsculas y minúsculas por defecto (los nombres de archivo distinguen entre mayúsculas y minúsculas). Es decir, seo y Seo se consideran archivos diferentes. El mismo lugar puede tener tanto archivos seo como Seo que solo difieren en mayúsculas y minúsculas, lo cual no ocurriría en el mundo de Mac y Windows.
Entonces, en Netlify, si tu código dice “Quiero importar el archivo Seo” pero el nombre del archivo es seo, dará error. Sin embargo, el mismo código en tu propia Mac o Windows podría funcionar bien.
Por qué es difícil de encontrar y no ocurre a menudo
Este error, una vez explicado, en realidad es bastante obvio. ¿No debería ser fácil de encontrar? Pero como se muestra en el mensaje de error al comienzo del artículo, no es muy obvio que este sea el problema. Es difícil de encontrar a través de Google, y de manera extraña, a veces ni siquiera muestra un error.
Otra razón por la que es difícil de encontrar es que el problema y la solución no están en Netlify, sino en Git y GitHub. Porque el código y los nombres de archivo en GitHub son inconsistentes, y Netlify sincroniza el código desde GitHub, por eso ocurren los errores de Netlify.
Aunque Git es insensible a mayúsculas y minúsculas por defecto, en casos generales, la situación que describí anteriormente—donde el código y los nombres de archivo no coinciden cuando se despliega en Netlify—no ocurre a menudo. Si inicialmente guardas un archivo como Seo, el nombre del archivo en GitHub y Netlify también será Seo. Es decir, para archivos creados por primera vez, todos los sistemas pueden distinguir correctamente entre mayúsculas y minúsculas.
Sin embargo, hay un caso especial donde ocurren errores: cuando ya tienes un archivo llamado seo en tu máquina local, y ya está subido a GitHub y Netlify, luego cambias el nombre del archivo a Seo en tu máquina local y lo subes a GitHub y Netlify. Solo cuando modificas el caso de un archivo existente de esta manera ocurrirán errores.
Debido a que tu sistema operativo es insensible a mayúsculas y minúsculas, cuando cambias seo a Seo, no le dirá a Git que el nombre del archivo cambió. Los nombres de archivo de tu Git y Netlify no cambiarán, pero el código en ellos cambiará, por lo que ocurre el error.
Una cosa a tener en cuenta: Git en tu máquina generalmente también es insensible a mayúsculas y minúsculas por defecto. Vi a alguien en Stack Overflow sugerir configurar Git para que sea sensible a mayúsculas y minúsculas usando el comando git config --local core.ignorecase false para hacer que Git recuerde los cambios de mayúsculas y minúsculas, pero esta es una sugerencia incorrecta y no resolverá el error anterior.
Configurar Git para que sea sensible a mayúsculas y minúsculas en un sistema de archivos insensible a mayúsculas y minúsculas causará situaciones extrañas. Por ejemplo, cuando cambias seo a Seo localmente, si ejecutas git status, verás +Seo pero no -seo, lo que significa que tanto seo como Seo aparecerán en GitHub, mostrando que esta configuración no puede resolver los errores que ocurren con el comportamiento predeterminado de Git insensible a mayúsculas y minúsculas.
Cómo resolver
Solo porque no ocurre a menudo no significa que no ocurrirá. Si ocurre, ¿cómo lo resuelves? Puedes seguir esta explicación, que tiene dos métodos:
Método 1:
git mv -f seo Seo
Método 2:
- Cambiar el nombre de
seoaSSS - Hacer commit
- Cambiar
SSSaSeo - Hacer commit nuevamente
Gamificación de atención al cliente
Sin embargo, lo que más me interesó sobre resolver este problema fue otra cosa. Netlify en realidad no proporciona atención al cliente para miembros gratuitos como yo, pero cuando publicas en su foro, el personal técnico oficial podría proporcionar sugerencias en el foro. Me registré para resolver este error en mi sitio web.
Como era mi primera publicación, mi nivel y permisos eran muy bajos, por lo que cuando publiqué, no pude subir más de 2 imágenes. Luego, al hacer varias cosas, obtienes insignias, como: primera vez usando Emoji, primera vez mencionando a alguien, tres días consecutivos en el foro, etc. En resumen, el sistema tiene bots que constantemente te dan retroalimentación, te animan a hacer buenas preguntas y responder preguntas, y luego tu nivel sigue subiendo. A medida que tu nivel sube, obtienes nuevos poderes para hacer cosas más avanzadas. Todo el proceso es un poco como jugar un juego, lo cual es bastante interesante.
Creo que este sistema anima a todos a compartir problemas descubiertos y soluciones, facilitando que los clientes de Netlify encuentren respuestas directamente en su foro cuando encuentren problemas, y puede reducir enormemente los costos de atención al cliente de Netlify. Esto en realidad fue la parte más impresionante de resolver este problema. No sé—tal vez la gamificación no es nueva en el mundo tecnológico, pero tal vez vale la pena que otras industrias la consideren.