¿Por qué el compositor elimina mis dependencies en la implementación?

Tengo un problema con el compositor . Estoy trabajando con git en un entorno local. Soy el único desarrollador.

Cuando necesito más dependencies (o necesito cambiar algunas versiones), edito el composer.json y ejecuto la composer install localmente.

Todo está bien.

Luego, cuando todo funciona localmente, confirmo mis cambios (incluidos composer.json y composer.lock ) y los envío a mi server de producción.

Un script posterior a la recepción actualiza las fonts y ejecuta una composer install en el server remoto.

Lo que es esperado :

  • Composer debería instalar las nuevas dependencies de acuerdo con el file composer.lock .
  • Debería ser feliz

Lo que pasa :

  • Compositor está enojado:

Advertencia: El file de locking no está actualizado con los últimos cambios en composer.json. Es posible que esté recibiendo dependencies obsoletas. Ejecute la actualización para actualizarlos.

  • Composer elimina todas las dependencies .
  • Mi producción está rota .
  • Tengo un ataque al corazón
  • Tengo que iniciar session en mi server a través de ssh y ejecutar una composer update para que todo funcione bien, pero sé que no se recomienda una composer update en un server de producción.

Aquí está el resultado de la sección del compositor posterior a la recepción :

 composer install Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them. - Removing guzzle/guzzle (v3.9.3) - Removing symfony/event-dispatcher (v2.7.1) - Removing geoip/geoip (v1.15) - Removing pimple/pimple (v3.0.0) - Removing cocur/slugify (1.1.x-dev) - Removing bentools/url (0.2) - Removing bentools/simplexmlextended (1.2.0) Generating autoload files 

Qué estoy haciendo mal ?

Gracias, Ben

Esta advertencia

Advertencia: El file de locking no está actualizado con los últimos cambios en composer.json, es posible que esté obteniendo dependencies obsoletas, ejecute la actualización para actualizarlas.

ocurre cuando el md5sum de tu composer.json difiere del almacenado en el composer.lock :

 { "hash": "b15ed9405e8547867f74973ce8add172", "packages": [ ... ] } 

Asegúrese de que composer.json y composer.lock sean idénticos a los locales (compare sus md5sums ). Sospecho que algo en su cadena de implementación no los está actualizando correctamente.

Asegúrese de agregar sus dependencies localmente con el command require :

 composer require new/package ~2.5 

o si composer.json se editó manualmente al less ejecutar

 composer update new/package 

después de eso para cada package agregado adicional para asegurarse de que se agrega correctamente a su composer.lock .

Otro enfoque:
ejecutar la composer update --lock en producción. Esto actualizará el hash en su file de locking pero no actualizará sus proveedores.

Luego ejecute la composer install para instalar los proveedores desde su comoser.lock .

Cuando necesito más dependencies (o necesito cambiar algunas versiones), edito el composer.json y ejecuto la installation del compositor localmente.

Eso está mal. Puede editar composer.json y luego ejecutar la composer update , o dejar que Composer realice la edición interna del file json y simplemente ejecutar el composer require new/package (opcionalmente con una versión).

De cualquier manera, debe terminar con un file composer.json y composer.lock cambiado, comprometer AMBOS en su repository, y el resultado esperado es que el file de locking contendrá todos los packages en las versiones correctas, que deben instalarse en producción con una ejecución de composer install regular del composer install .

Tenga en count que su flujo de trabajo sigue siendo muy peligroso. Si presionas, y Github está fuera de línea, ¿cómo conseguirías instalar los ZIP?