¿Debería compilarse y compilarse el código fuente de una aplicación web antes de la implementación o una vez implementado en el servidor de producción?

Se considera una mejor práctica construirlo en otro lugar y luego implementarlo en producción. Hay algunas buenas razones para esto:

  1. El proceso de construcción generalmente tiene dependencias adicionales que no son necesarias en la producción. En algunos casos, esas dependencias son vectores de ciberataques.
  2. El proceso de compilación tiene un perfil de recursos (CPU, memoria, disco, etc.) diferente que un servidor de producción. Puede ser más rentable tener diferentes máquinas sintonizadas para cada proceso.
  3. Es posible que tenga varios entornos: desarrollo, prueba, puesta en escena, etc. Si construyo la aplicación y la guardo en algún lugar, puedo asegurarme de que se implementen exactamente los mismos artefactos en cada entorno. De esa manera sé que lo que estoy probando es lo mismo que puse en producción. Si lo compilo en el servidor, entonces tengo que asegurarme de que el entorno de compilación en cada máquina sea el mismo, y eso agrega una complejidad innecesaria.
  4. Construir en producción significa que el proceso de implementación lleva más tiempo y eso significa más tiempo de inactividad (a menos que esté haciendo azul-verde).

A2A.

La compilación es un proceso diferente al que suele hacer su aplicación. Requiere diferentes tipos de recursos, y una cosa que no desea hacer es retrasar las conexiones porque necesita compilar su código (a veces durante decenas de minutos). Sin embargo, a veces no tiene otra opción, y me refiero a los idiomas interpretados (como JS en el nodo). Luego, su intérprete realizará una compilación de primera ejecución, inevitable.

Una cosa que tampoco desea tener es herramientas de desarrollo en su servidor de producción. Ese sería el séptimo cielo de un hacker.

Como uso PHP, tampoco. PHP se interpreta, no se compila, y se interpreta cada vez que alguien se conecta al sitio.

Pero si está utilizando un lenguaje compilado, siempre realiza cambios en el servidor de prueba, no en el servidor de producción. Y la compilación es un cambio. Una vez que funciona en el servidor de prueba, copia al servidor de producción.

(Realizar cambios en el servidor de producción lo deja con el riesgo de que los usuarios obtengan una página en blanco o un error 500).

Yo diría que es mejor compilar de antemano. En mi opinión, siempre debe ejecutar su unidad, e2e y pruebas manuales contra el código incorporado antes de presionar para presionar. No desea enviar accidentalmente código roto a producción.

Compilado es una forma extraña de decirlo, en muchos casos. Con Java y .NET no tiene otra opción, el código se compila / construye y empaqueta (por ejemplo, en un archivo WAR) y luego se implementa y “explota”. Con Ruby on Rails, es típico construir dependencias por adelantado y empaquetarlas con su aplicación (esa es la carpeta “proveedor” en su aplicación). Con Python (por ejemplo, Django) puede hacer lo mismo, aunque tengo la tendencia de instalar dependencias en el sistema (potencialmente con pyenv) y actualizarlas según sea necesario.

Python, en particular, se “compila” a bytecode (similar a Java), razón por la cual ve archivos .pyc, que se ejecutan a través del intérprete de Python (algo así como la JVM).

En general, nunca compilarías O construirías un paquete OR en producción, independientemente del contexto del que estemos hablando, con la excepción de los paquetes Python, y solo potencialmente.

La elección de compilar dependerá del idioma. No todos los idiomas requieren compilación para funcionar.