Buenas,
Tengo un problema rarísimo al instalar las dependencias de mi proyecto mediante composer, el tema es que tengo una aplicación bastante sencilla hecha con Silex que tiene algunas dependencias de otras librerías, la cuestión es que cuando ejecuto el comando composer install -o --prefer-dist
en mi máquina local funciona perfectamente pero cuando lanzo el despliegue del proyecto desde el servidor Jenkins instalado en nuestro servidor de integración continua falla con el siguiente error:
Installing dependencies (including require-dev) from lock file Your requirements could not be resolved to an installable set of packages. Problem 1 - Installation request for symfony/icu v1.2.1 -> satisfiable by symfony/icu[v1.2.1]. - symfony/icu v1.2.1 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it. Problem 2 - symfony/icu v1.2.1 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it. - symfony/intl v2.5.0 requires symfony/icu ~1.0-RC -> satisfiable by symfony/icu[v1.2.1]. - Installation request for symfony/intl v2.5.0 -> satisfiable by symfony/intl[v2.5.0].
Lo extraño es que este error sólo se produce cuando existe el fichero composer.lock, ya que si lo elimino el comando de instalación funciona correctamente. He probado a darle todos los permisos a los ficheros composer.json
y composer.lock
por si se tratase de algún problema de permisos pero no hay manera de que funcione.
A ver si alguien tuviese alguna idea sobre lo que puede estar pasando.
Un saludo y gracias de antemano.
Respuestas
De los errores que se pueden producir al instalar Symfony, este es uno de los más habituales. Siempre que me lo he encontrado, la causa era la que se explica en esta línea del mensaje de error:
symfony/icu v1.2.1 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it
En el sistema de producción no tienes instalada, no tienes activada o no tienes actualizada la extensión intl
de PHP. Si esta es realmente la causa del error, al ejecutar php -m
en local verás la extensión intl
y al ejecutarlo en la máquina de producción no lo verás.
Si en vez del composer install
ejecutas un composer update
, el error desaparece porque Symfony es "inteligente" y detecta que no tienes la extensión intl
. Lo que hace en ese caso es instalarte una especie de extensión intl
falsa para que todo siga funcionando. El problema es que esta extensión falsa no te permite traducir elementos como fechas, ya que solamente soporta el inglés como idioma.
@javiereguiluz
Muchísimas gracias Javier, tienes toda la razón, ha sido instalar la extensión intl y funcionar perfectamente. El problema es que la instalación de dependencias la realizamos en el servidor de integración continua para luego desplegarlas sobre el servidor de producción, pero el servidor de integración continua parece que está un poco descuidado en cuanto a extensiones y actualizaciones :S.
@beni0888