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 install
es suficiente. En su caso, mientras usa un hosting compartido, creo que no podrácomposer update
trabajar, 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
, lacomposer
cadena 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 composer
le 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) update
es más conveniente debido a que no es necesario especificar la ruta del compositor.php -d memory_limit=-1 $(which composer).phar update
Configúrelo para usar tanta memoria como quiera con:
COMPOSER_MEMORY_LIMIT=-1 composer update
fuente
COMPOSER_MEMORY_LIMIT=-1; export COMPOSER_MEMORY_LIMIT
. ¿O definirlo como un alias de shell?alias memcomposer='COMPOSER_MEMORY_LIMIT=-1 composer'
, luego use enmemcomposer
lugar decomposer
Fatal 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 52
Estoy 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 update
Pero no funcionó porque
-> Eso es del sitio web oficial del compositor.
Entonces encontré un comando que funciona:
$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update
Aunque, 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_LIMIT
ymemory_limit
en la línea de comando:En Windows:
set COMPOSER_MEMORY_LIMIT=99999999999&& php -d memory_limit=-1 composer.phar update
En Linux:
export COMPOSER_MEMORY_LIMIT=99999999999 && php -d memory_limit=-1 composer.phar update
fuente
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 /swapfile
para que sea permanente, agregue esto al archivo / etc / fstab,
/swapfile swap swap defaults 0 0
Para 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.img
puede 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_limit
valor 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 = -1
Lea 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.ini
Todas 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-update
Puede 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 update
Utilice 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 update
Puede 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=-1
un 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.ini
Agregue
memory_limit=-1
a 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 = -1
Tenga 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.ini
Luego 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/packages
fuente
Para aquellos que usan Laravel Homestead
Escribe esto en
Homestead.yaml
variables: - key: COMPOSER_MEMORY_LIMIT value: -1
fuente
php ini
archivomemory_limit = -1
fuente
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 update
fuente
sudo
no es una buena idea, ya que confundirá tus permisos. Esto parece que estás corriendocomposer update
en 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