Necesito ejecutar la actualización del compositor en mi alojamiento, así que inicio sesión con ssh e intento ejecutar comand:
composer update
dentro de la carpeta / www donde tengo laravel y la instalación del compositor
en contacto con mi proveedor de alojamiento me dicen que ejecute el comando:
php -d memory_limit=512M composer update
Ejecuto este comando pero obtengo: "No se pudo abrir el archivo: compositor"
¿Qué hacer? ¿Cuál es la solución aquí?
php
laravel
ssh
composer-php
Andrés
fuente
fuente


composer installes suficiente. En su caso, mientras usa un hosting compartido, creo que no podrácomposer updatetrabajar, así que la única forma es comprar un hosting VPS como Digital Ocean, Linode.Respuestas:
Cuando ejecute
composer update, el sistema operativo buscará en las rutas configuradas e intentará localizar un archivo ejecutable con ese nombre.Cuando se ejecuta
php composer update, lacomposercadena se trata como un parámetro de PHP, que no se busca en ninguna ruta. Debe proporcionar la ruta completa para ejecutarlo.La ejecución
which composerle dirá dónde encuentra el sistema operativo el ejecutable del compositor, y luego simplemente use la ruta completa en el comando PHP:$>which composer /usr/local/bin/composer $>php -d memory_limit=512M /usr/local/bin/composer update ...Tenga en cuenta que 512 MB pueden ser muy pocos. Mi percepción es que felizmente tomará 1GB o más, dependiendo de la cantidad de dependencias que uses y la variedad de versiones que teóricamente permitas, es decir, si permites Symfony
~2.3, entonces haces que Composer maneje muchas más versiones posibles en comparación con el uso~2.7.También tenga en cuenta que ejecutar Composer en la máquina de producción no es la mejor idea. Debería tener acceso a Github, tal vez proporcionar credenciales de acceso, tener herramientas VCS instaladas y romperá fácilmente su sitio si alguno de los servidores de alojamiento remoto está fuera de línea durante su actualización. Es una mejor idea usar Composer en un sistema de implementación que hace toda la preparación y luego mueve todos los archivos al servidor de producción.
Actualizar
Ahora estamos en el año 2020, y la forma en que Composer administra su memoria ha cambiado bastante. Lo más importante es que Composer aumentará el límite de memoria por sí mismo si encuentra un límite demasiado bajo. Sin embargo, esto desencadena inmediatamente el problema de quedarse sin memoria en máquinas que tienen muy poca memoria instalada. Puede hacer que Composer use menos memoria configurando la variable de entorno como
COMPOSER_MEMORY_LIMIT=512M, pero esto creará problemas si Composer necesita más memoria para funcionar correctamente.Mi punto principal sigue siendo cierto: no ejecute Composer en máquinas que tengan muy poca memoria instalada. Potencialmente, necesita 1,5 GB de memoria libre para poder actualizar todo.
fuente
php -d memory_limit=-1 $(which composer) updatees más conveniente debido a que no es necesario especificar la ruta del compositor.php -d memory_limit=-1 $(which composer).phar updateConfigúrelo para usar tanta memoria como quiera con:
COMPOSER_MEMORY_LIMIT=-1 composer updatefuente
COMPOSER_MEMORY_LIMIT=-1; export COMPOSER_MEMORY_LIMIT. ¿O definirlo como un alias de shell?alias memcomposer='COMPOSER_MEMORY_LIMIT=-1 composer', luego use enmemcomposerlugar decomposerFatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 4096 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52Estoy enfrentando problemas con el compositor porque consume toda la memoria disponible, y luego, el proceso se mata (en realidad, el mensaje de salida es "Killed")
Entonces, estaba buscando una solución para limitar el uso de la memoria del compositor.
Lo intenté (de las respuestas de @Sven)
$ php -d memory_limit=512M /usr/local/bin/composer updatePero no funcionó porque
-> Eso es del sitio web oficial del compositor.
Entonces encontré un comando que funciona:
$ COMPOSER_MEMORY_LIMIT=512M php composer.phar updateAunque, en mi caso, ¡512 MB no es suficiente!
Fuente: https://www.agileana.com/blog/composer-memory-limit-troubleshooting/
fuente
COMPOSER_MEMORY_LIMIT=-1 composer require <package name>Tuve que combinar
COMPOSER_MEMORY_LIMITymemory_limiten la línea de comando:En Windows:
set COMPOSER_MEMORY_LIMIT=99999999999&& php -d memory_limit=-1 composer.phar updateEn Linux:
export COMPOSER_MEMORY_LIMIT=99999999999 && php -d memory_limit=-1 composer.phar updatefuente
Si hay suficiente memoria, el compositor la consumirá internamente y se ejecutará sin ningún problema. No es necesario decirle específicamente al compositor que lo haga.
¿Ha intentado aumentar su memoria de intercambio, porque funcionó para mí? Aumenté la memoria de intercambio a 4096 Mb (4 GB) y ahora todo me parece genial.
primero use "
sudo free" para ver la memoria disponible e intercambiar memoria. y configurar swap como,Para Debian:
sudo fallocate -l 4G /swapfile sudo dd if=/dev/zero of=/swapfile bs=4096k count=1048 sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfilepara que sea permanente, agregue esto al archivo / etc / fstab,
/swapfile swap swap defaults 0 0Para CentOS:
[root@myserver]:/# cd /var [root@myserver]:/var# touch swap.img [root@myserver]:/var# chmod 600 swap.img [root@myserver]:/var# mkswap /var/swap.img [root@myserver]:/var# dd if=/dev/zero of=/var/swap.img bs=4096k count=1000 [root@myserver]:/var# mkswap /var/swap.img [root@myserver]:/var# swapon /var/swap.imgpuede aumentar su memoria de intercambio cambiando bs = 1024k o 2048k o 8096k dependiendo del tamaño de su volumen físico. use los comandos 'swapon' y swapoff para ver la diferencia.
comprobar 'intercambio' (60 debería funcionar bien)
fuente
Puedes cambiar el
memory_limitvalor en su php.iniIntente aumentar el límite en su archivo php.ini
Use -1 para ilimitado o defina un valor explícito como 2G
memory_limit = -1Lea la documentación getcomposer.org
fuente
En MAC OS High Siera ejecuté lo siguiente:
Devuelto:
Configuration File (php.ini) Path: /usr/local/etc/php/7.4 Loaded Configuration File: /usr/local/etc/php/7.4/php.ini Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d Additional .ini files parsed: /usr/local/etc/php/7.4/conf.d/ext- opcache.ini, /usr/local/etc/php/7.4/conf.d/php-memory-limits.iniTodas las respuestas anteriores establecen la configuración cargada que se actualiza, pero observe que los archivos .ini adicionales analizados tienen php-memory-limits.ini como un archivo separado. También debe actualizar este límite de memoria de archivos. De la misma manera, abra en el editor de texto y cambie a algo como 2G. El resultado de la falla del límite de memoria debería indicarle cuánta memoria necesita para ejecutarse, simplemente configúrelo en un valor más alto o -1 para ilimitado.
fuente
Este error puede ocurrir especialmente cuando está actualizando bibliotecas grandes o bibliotecas con muchas dependencias. Composer puede tener mucha memoria.
Asegúrese de que su compositor esté actualizado a la última versión:
php composer.phar --self-updatePuede aumentar el límite de memoria para el compositor temporalmente agregando la variable de entorno del límite de memoria del compositor:
COMPOSER_MEMORY_LIMIT=128MB php composer.phar updateUtilice el formato "128M" para megabyte o "2G" para gigabyte. Puede utilizar el valor "-1" para ignorar el límite de memoria por completo.
Otra forma sería aumentar el límite de memoria de PHP:
php -d memory_limit=512M composer.phar update ...fuente
¿Qué tamaño tiene su servidor AWS? Si solo tiene 1 GB de RAM, establecer el límite de memoria de 2 GB en php.ini no ayudará.
Si no puede / no desea aumentar también el lado del servidor para obtener más RAM disponible, también puede habilitar SWAP.
Consulte aquí cómo habilitar el intercambio. Permite 4 GB, aunque normalmente yo solo hago 1 GB.
Fuente: Obtenido del sitio laracast
fuente
La mejor solucion para mi es
COMPOSER_MEMORY_LIMIT=-1 composer require <package name>mencionado por @realtebo
fuente
En mi caso, ninguna de las respuestas ayudó. Finalmente resultó que el cambio a una versión de 64 bits de PHP (M $ Windows) solucionó el problema de inmediato. No cambié ninguna configuración, simplemente funcionó.
fuente
Hice esto en Widnows 10 y trabajé conmigo:
php -d memory_limit=-1 C:/ProgramData/ComposerSetup/bin/composer.phar updatePuede cambiar el valor xx que desee
fuente
Estoy ejecutando Laravel 6 con Homestead y también encontré este problema. Como se sugiere aquí en las otras respuestas, puede prefijar
COMPOSER_MEMORY_LIMIT=-1un solo comando y ejecutar el comando normalmente. Si desea actualizar su configuración de PHP para permitir siempre memoria ilimitada, siga estos pasos.vagrant up vagrant ssh php --version # 7.4 php --ini # Shows path to the php.ini file that's loaded cd /etc/php/7.4/cli # your PHP version. Each PHP version has a folder sudo vi php.iniAgregue
memory_limit=-1a su archivo php.ini. Si tiene problemas para usar Vim o para realizar ediciones en el archivo php.ini, consulte esta respuesta sobre cómo editar el archivo php.ini con Vim. El archivo debería verse así:; Maximum amount of memory a script may consume ; http://php.net/memory-limit memory_limit = -1Tenga en cuenta que esto podría consumir una cantidad infinita de memoria en su máquina. Probablemente no sea una buena idea para la producción jajaja. Con Laravel Valet tenía que seguir este artículo y actualizar el valor de la memoria aquí:
sudo vi /usr/local/etc/php/7.4/conf.d/php-memory-limits.iniLuego reinicie el servidor con Valet:
Esta respuesta también fue útil para cambiar la configuración con Laravel Valet en Mac para que los cambios surtan efecto.
fuente
<C:\>set COMPOSER_MEMORY_LIMIT=-1 <C:\>composer install exhausted/packagesfuente
Para aquellos que usan Laravel Homestead
Escribe esto en
Homestead.yamlvariables: - key: COMPOSER_MEMORY_LIMIT value: -1fuente
php iniarchivomemory_limit = -1fuente
En mi caso, necesitaba permisos más altos junto con este aumento del límite de memoria.
sudo COMPOSER_MEMORY_LIMIT=2G php /opt/bitnami/php/bin/composer.phar updatefuente
sudono es una buena idea, ya que confundirá tus permisos. Esto parece que estás corriendocomposer updateen un servidor; también es una mala práctica, ya que hará que sea mucho más diferente poner las dependencias calculadas bajo el control de versiones