Symfony 4: El archivo Makefile

El archivo Makefile

En muchos proyectos es habitual tener scripts propios para ejecutar tareas: ejecutar los tests unitarios o de integración, arrancar el servidor web interno de PHP, etc. En estos casos no tiene mucho sentido crear un comando de Symfony para ejecutar este tipo de scripts.

También es habitual, por comodidad, definir algunos de esos scripts en el archivo composer.json de la aplicación. Silex por ejemplo hace eso con el script que arranca el servidor web interno de PHP. Lo malo es que es difícil gestionar cosas como los timeouts o la falta de soporte de las secuencias de escape ANSI de los comandos.

En cualquier caso, sea en el archivo composer.json o en otro lugar, tener todos estos scripts centralizados en un sitio es muy útil. ¿Y si usamos para ello un archivo Makefile? Este es posiblemente el cambio más controvertido de Symfony 4. Hemos estado dudando muchísimo sobre si hacer este cambio o no. Al final hemos decidido hacerlo porque aporta un gran valor y resuelve algunos de nuestros problemas.

Puede que ya conozcas la herramienta make, porque es bastante conocida y “estándar” en el ámbito de la programación. Se trata de una herramienta mucho más poderosa que los scripts que ejecuta Composer. Además no requiere del uso de PHP. Se puede utilizar para desplegar aplicaciones, conectarte mediante SSH a servidores remotos, ejecutar npm, gulp, webpack, Blackfire, etc. En definitiva, muchos casos de uso en los que los comandos tradicionales de Symfony no son prácticos.

Make además es muy poderoso, ya que puede ejecutar tareas en paralelo, evitar la ejecución de tareas si no ha habido cambios, etc.

Vamos a ver un ejemplo: el borrado de la caché. Symfony tiene un comando para borrar la caché y otro para pre-generar la caché. Sin embargo, hacer las dos cosas en el mismo proceso no funciona bien porque PHP no es capaz de recargar una clase cuando su contenido cambia. Pero hacerlo con make es facilísmo:

cache-clear:
    @test -f bin/console && bin/console cache:clear --no-warmup || rm -rf var/cache/*
.PHONY: cache-clear
 
cache-warmup: cache-clear
    @test -f bin/console && bin/console cache:warmup || echo "cannot warmup the cache (needs symfony/console)"
.PHONY: cache-warmup

Otro ejemplo práctico: la mayoría de mis proyectos PHP tienen estas dos tareas para ejecutar los tests de Blackfire automáticamente:

bf-dev:
    blackfire-player --endpoint=http://`bin/console server:status --filter=address` run tests/bkf/all.bkf
.PHONY: bf-dev
 
bf-prod:
    blackfire-player --endpoint=https://twig.sensiolabs.org run tests/bkf/all.bkf --variable="env=prod"
.PHONY: bf-prod

Otro caso de uso de make es poner una aplicación en modo “mantenimiento” mientras haces cambios. Mucho más cómodo que hacerlo con un comando de Symfony.

Fuente: https://symfony.es/noticias/2017/04/07/symfony-4-buenas-practicas/

Sobre Ruben 12 Artículos
Graduado en la UCI, amante de las tecnológicas y de la programación.

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*