Archivos de Tags: Composer @es

“Uncaught exception ‘ErrorException’ with message ‘proc_open(): fork failed” en composer

Me apareció el siguiente error al hacer un update con composer:

PHP Fatal error:  Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:943

logo-composer-transparent

Pensaba que era el mismo error que tuve antes y que solucioné dándole memoria ilimitada al proceso PHP, pero no lo era y no funcionó. La única forma en la que lo conseguí solucionar fué actualizando PHP 5.3.10 a PHP 5.5.16 (PHP 5.4 también debería funcionar).

Primero hay que hacer un backup de los ficheros de configuración de Apache y PHP:

/etc/apache2/apache2.conf
/etc/php5/apache2/php.ini
/etc/php5/cli/php.ini

Añadir el repositorio deseado:

  • PHP 5.4: sudo add-apt-repository ppa:ondrej/php5-oldstable
  • PHP 5.5: sudo add-apt-repository ppa:ondrej/php5

Y hacer update/upgrade:

sudo apt-get update
sudo apt-get upgrade

Probablemente te aparezca este mensaje:

The following packages have been kept back:
  apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common
  libapache2-mod-php5 libapr1 libapr1-dev libaprutil1 libaprutil1-dbd-sqlite3
  libaprutil1-dev libaprutil1-ldap libjson0 libjson0:i386 php-pear php5
  php5-cli php5-common php5-curl php5-dev php5-gd php5-imagick php5-intl
  php5-mcrypt php5-mysqlnd php5-pgsql php5-xdebug php5-xmlrpc php5-xsl
0 upgraded, 0 newly installed, 0 to remove and 29 not upgraded.

Puedes actualizarlos a mano:

sudo apt-get -y install php-pear php5 php5-cli php5-common php5-curl php5-dev php5-gd php5-imagick php5-intl php5-mcrypt php5-mysqlnd php5-pgsql php5-xdebug php5-xmlrpc php5-xsl

Luego limpiar todo lo que sobra:

sudo apt-get autoremove

Y luego actualizar el resto:

sudo apt-get -y install apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapache2-mod-php5

Durante el proceso de actualización se te preguntará qué hacer con tus ficheros originales de Apache y PHP. A mí me gusta dejar al proceso de actualización que los sustituya y luego los comparo yo a mano para actualizar todo lo necesario. Por ejemplo la librería xdebug.so en PHP 5.3 estaba en /usr/lib/php5/20090626/xdebug.so y en PHP 5.5 esta en /usr/lib/php5/20121212/xdebug.so.

ACTUALIZACIÓN: Apache 2.4 usa IncludeOptional en vez de Include y esto hizo que mis virtual host dejaran de funcionar. Lo cambié otra vez a Include y todo volvió a la normalidad.

Include sites-enabled/*.conf

Ref: https://github.com/composer/composer/issues/945
http://www.pixelite.co.nz/article/upgrading-php-54-ubuntu-1204-lts-support-drupal-8

Solucionar “Fatal error: Allowed memory size of X bytes exhausted (tried to allocate X bytes)” con composer update

Me apareció el siguiente error al ejecutar composer update en uno de mis proyectos Symfony2:

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 3781182 bytes) in phar:///usr/local/bin/composer/src/Composer/Util/RemoteFilesystem.php on line 202

logo-composer-transparent

La página de resolución de problemas de Composer dice que puedes aumentar la cantidad de memoria que PHP puede asignarse cambiando el valor de memory_limit en php.ini. Lo cambié de 128M a 512M pero seguía sin funcionar.

Al final la solución fue ejecutar el comando de composer update sin ningún límite de memoria de esta forma:

php -d memory_limit=-1 /usr/local/bin/composer update

Actualizar composer y todos los paquetes instalados con él

php composer.phar self-update
php composer.phar update

Instalar una aplicación Symfony2 usando Composer

Antes de instalar un proyecto Symfony2 tienes que cumplir los requisitos mínimos en tu servidor. Yo tuve problemas porque usaba XAMPP y este no cumple los requisitos mínimos para PHP 5.3. La versión mínima es 5.3.3 para Symfony2 2.1 y 5.3.2 para Symfony2 2.0. Es por esto que desinstalé XAMPP e installé Apache2+PHP+MySQL usando MacPorts. Puedes ver los últimos requisitos mínimos de Symfony2 aquí.

Entonces tienes que instalar Composer. Puedes bajártelo manualmente o símplemente ejecutar este comando (si tienes curl instalado):

curl -s https://getcomposer.org/installer | php

Puede aparecerte el siguiente error al descargar Composer:

All settings correct for using Composer
Downloading...
Download failed: failed to open stream: Permission denied
Downloading...
Download failed: failed to open stream: Permission denied
Downloading...
Download failed: failed to open stream: Permission denied
The download failed repeatedly, aborting.

Esto se debe a que estás en una carpeta en la que no tienes permisos de escritura. En mi caso estaba en /var/www. Esa carpeta tiene permisos 755 y el usuario:grupo dueños son root:root. Cambién los permisos a 775, su grupo dueño a www-data y añadí mi usuario al grupo www-data group (añadiendo www-data al final de la línea que configura mi usuario en /etc/group) para poder tener permisos de escritura.

Composer usa git para descargar Symfony2 así que tienes que instalarlo:

sudo apt-get -y install git

Después de instalar Composer y Git puedes instalar la última versión 2.2.0 de Symfony2 ejecutando el siguiente comando (tarda un buen rato):

php composer.phar create-project symfony/framework-standard-edition /path/to/webroot/new_folder 2.2

Si quieres descargarte por ejemplo la versión 2.1.x-dev puedes hacerlo ejecutando este comando:

php composer.phar create-project symfony/framework-standard-edition /path/to/webroot/new_folder 2.1.x-dev

Se creará una nueva carpeta con el nombre indicado en el comando anterior dentro de tu carpeta webroot. Ahora solo falta hacer accesible la carpeta web que se encuentra en esa nueva carpeta al servidor web. Puedes seguir las instrucciones de la guía “Configurar virtual hosts para XAMPP en Mac OS X“. Aunque la guía sea para XAMPP y Mac OS X el proceso es similar para cualquier servidor web Apache.

Ahora todos los ficheros están instalados y el servidor configurado pero todavía nos falta cambiar los permisos de las carpetas cache y log para no tener errores al intentar vaciar la cache y los logs. Este proceso depende del sistema y está explicado en la sección “Setting up Permissions” en la guía oficial de configuración, pero en Ubuntu yo tuve que ejecutar lo siguiente (suponiendo que el usuario que ejecuta Apache se llama www-data):

rm -rf app/cache/*
rm -rf app/logs/*
sudo setfacl -R -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs
sudo setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs

En Mac OS X (y en otros sistemas que soportan chmod +a) sería así (suponiendo que el usuario que ejecuta Apache se llama _www):

rm -rf app/cache/*
rm -rf app/logs/*
sudo chmod +a "_www allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

Una vez configurado el servidor web se puede acceder a la nueva web abriendo el fichero app_dev.php en un navegador web.

welcome