我需要在我的主机上运行composer update,所以我使用ssh登录并尝试运行comand:
composer update
inside / www文件夹,我有laravel和composer instalation
与我的托管服务提供商联系,他们告诉我运行命令:
php -d memory_limit=512M composer update
我运行此命令但得到:“无法打开文件:composer”
怎么办?这里的解决方案是什么?
答案 0 :(得分:33)
当您运行composer update
时,操作系统将查看已配置的路径并尝试找到具有该名称的可执行文件。
运行php composer update
时,composer
字符串被视为PHP的参数,不会在任何路径中搜索。您必须提供完整路径才能运行它。
运行which composer
将告诉您操作系统找到作曲家可执行文件的位置,然后您只需使用PHP命令中的完整路径:
$>which composer
/usr/local/bin/composer
$>php -d memory_limit=512M /usr/local/bin/composer update
...
请注意,512MB可能太少了。我的看法是,它会高兴地占用1GB或更多,具体取决于您使用的依赖项数量和理论上允许的各种版本,即如果您允许Symfony ~2.3
,那么您可以让Composer处理更多与使用~2.7
相比,可能的版本。
另请注意,在生产计算机上运行Composer并不是最好的选择。您必须有权访问Github,可能提供访问凭据,安装了VCS工具,如果任何远程主机服务器在您更新期间处于脱机状态,您将很容易破坏您的站点。最好在部署系统上使用Composer进行所有准备工作,然后将所有文件移动到生产服务器上。
答案 1 :(得分:13)
我必须在命令行中组合COMPOSER_MEMORY_LIMIT
和memory_limit
:
在Windows上:
set COMPOSER_MEMORY_LIMIT=99999999999&& php -d memory_limit=-1 composer.phar update
在Linux上:
export COMPOSER_MEMORY_LIMIT=99999999999 && php -d memory_limit=-1 composer.phar update
答案 2 :(得分:8)
对我来说最好的解决方案是
COMPOSER_MEMORY_LIMIT=-1 composer require <package-name>
由@realtebo提及
答案 3 :(得分:3)
如果有足够的内存作曲家可以在内部使用它,并且可以正常运行。无需专门告诉作曲家。
您是否尝试过增加交换内存,因为它对我有用。我将交换内存增加到4096Mb(4GB),现在对我来说一切都很好。
首先使用“ sudo free
”查看可用内存和交换内存。然后将swap配置为
对于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
要使其永久存在,请将其添加到/ etc / fstab文件/swapfile swap swap defaults 0 0
对于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
您可以将交换内存增加changin bs = 1024k或2048k或8096k 取决于您的物理卷大小。 使用“ swapon”和swapoff命令查看区别。
检查“ swappiness”(60应该很好)
cat /proc/sys/vm/swappiness
答案 4 :(得分:3)
在MAC OS High Siera上,我运行以下命令:
MacBook-Pro:asiu jack$ php --ini
返回:
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
以上所有答案均设置了会更新的已加载配置,但请注意,解析的其他.ini文件具有php-memory-limits.ini作为单独的文件。您还必须更新此文件的内存限制。以相同的方式在文本编辑器中打开,然后更改为类似2G的格式。内存限制失败的输出将告诉您需要运行多少内存,只需将其设置为大于该值或将-1设置为无限即可。
答案 5 :(得分:2)
您可以在php.ini中更改memory_limit
的值
尝试增加php.ini文件中的限制
使用-1表示无限制,或定义一个明确的值,例如2G
memory_limit = -1
注意:Composer在内部将memory_limit增加到1.5G。
阅读文档getcomposer.org
答案 6 :(得分:2)
尤其是当您更新大型库或具有很多依赖性的库时,可能会发生此错误。作曲家可能会非常消耗内存。
请确保您的作曲家本身已更新为最新版本:
php composer.phar --self-update
您可以通过添加composer内存限制环境变量来临时增加composer的内存限制:
COMPOSER_MEMORY_LIMIT=128MB php composer.phar update
对于兆字节,请使用格式“ 128M”,对于千兆字节,请使用“ 2G”格式。您可以使用值“ -1”来完全忽略内存限制。
另一种方法是增加PHP内存限制:
php -d memory_limit=512M composer.phar update ...
答案 7 :(得分:1)
我遇到了composer的问题,因为它消耗了所有可用的内存,然后进程被杀死(实际上,输出消息是“已杀死”)
所以,我正在寻找一种限制作曲家内存使用的解决方案。
我尝试过(来自@Sven答案)
$ php -d memory_limit=512M /usr/local/bin/composer update
但这没用,因为
“ Composer内部将memory_limit增加到1.5G。”
->那是来自作曲家官方网站。
然后我找到了一个有效的命令:
$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update
虽然认为512还不够!
来源:https://www.agileana.com/blog/composer-memory-limit-troubleshooting/
答案 8 :(得分:1)
我是在Widnows 10上制作的,并与我一起工作:
php -d memory_limit=-1 C:/ProgramData/ComposerSetup/bin/composer.phar update
您可以更改所需的 xx 值
memory_limit=XX
答案 9 :(得分:0)
它在以后的作曲家版本中得到了修复。 在 Windows 上,我必须卸载 composer 然后下载+安装最新版本 https://getcomposer.org/download/
现在运行 composer update
有效!
答案 10 :(得分:0)
在Windows 10(Git bash)中,我不得不使用此
php -d memory_limit=-1 C:\\composer\\composer.phar install
答案 11 :(得分:0)
对于Laravel
第1步。打开您的终端机
第2步。cd
进入您的laravel目录
第3步。在laravel目录中键入命令which composer
,并记下作曲家所在的目录。
第4步。运行命令php -d memory_limit=-1 /opt/cpanel/bin/composer update
(如果适合您,也可以运行代码)
(将/opt/cpanel/bin/composer
更改为步骤3中返回的目录路径)
问题已解决
答案 12 :(得分:0)
php ini
文件memory_limit = -1
答案 13 :(得分:0)
答案 14 :(得分:0)
<C:\>set COMPOSER_MEMORY_LIMIT=-1
<C:\>composer install exhausted/packages
答案 15 :(得分:0)
我在Homestead上运行Laravel 6,也遇到了这个问题。如在其他答案中此处建议的那样,您可以在单个命令前加上COMPOSER_MEMORY_LIMIT=-1
并正常运行该命令。如果您想更新PHP配置以始终允许无限的内存,请按照以下步骤操作。
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
将memory_limit=-1
添加到您的php.ini文件中。如果您在使用Vim或对php.ini文件进行编辑时遇到问题,请查看this answer,了解如何使用Vim编辑php.ini文件。该文件应如下所示:
; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit = -1
请注意,这可能会耗尽计算机上的无限内存。生产哈哈可能不是一个好主意。使用Laravel Valet,必须遵循this article并在此处更新内存值:
sudo vi /usr/local/etc/php/7.4/conf.d/php-memory-limits.ini
然后使用Valet重新启动服务器:
valet restart
This answer有助于在Mac上使用Laravel Valet更改配置,使更改生效。
答案 16 :(得分:0)
就我而言,所有答案都无济于事。最终证明,更改为64位版本的PHP(M $ Windows)立即解决了该问题。我没有更改任何设置-可以正常工作。
答案 17 :(得分:0)
您的AWS服务器多大?如果它只有1gb的内存,则在php.ini中设置2gb的内存限制将无济于事。
如果您也不想/也不想增加服务器端以获取更多可用RAM,则也可以启用SWAP。
how to enable swap.参见此处,它启用了4gb,尽管我通常自己只做1GB。
来源:从laracast网站获得
答案 18 :(得分:0)
设置它以使用所需的内存:
COMPOSER_MEMORY_LIMIT=-1 composer update
答案 19 :(得分:-1)
就我而言,它需要更高的权限以及内存限制的增加。
sudo COMPOSER_MEMORY_LIMIT=2G php /opt/bitnami/php/bin/composer.phar update