У Composer заканчивается память на каждом проекте, Mac OS X

Я попытался установить aws/aws-sdk-php вчера на одном из моих проектов Laravel 4, используя Composer, я не могу точно запомнить цепочку событий, но он не был успешно установлен. С тех пор я получаю ошибки, из-за которых у Composer закончилась Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 32 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52 .

Я увеличил php.ini memory_limit до -1, и это все еще происходит, как в моей среде разработки, так и в производственной среде (производство Cent OS 6). Установка завершается успешно, если я увеличиваю memory_limit через CLI при запуске composer_update но это займет целую вечность.

Есть ли какой-то кеш, который мне нужно очистить, чтобы у Composer не хватало памяти? У меня такое ощущение, что он все равно пытается установить AWS SDK каждый раз, когда я запускаю обновление для композитора.

Файл композитора

 { "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "require": { "laravel/framework": "4.0.*", "rtablada/package-installer": "dev-master", "mogreet/mogreet-php": "dev-master", "twilio/laratwilio": "dev-master", "balloon/elephant.io": "dev-master", "facebook/php-sdk": "dev-master", "way/generators": "dev-master", "codesleeve/asset-pipeline": "dev-master", "natxet/CssMin": "dev-master" }, "autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php", "app/libraries" ] }, "scripts": { "post-install-cmd": [ "php artisan optimize" ], "pre-update-cmd": [ "php artisan clear-compiled" ], "post-update-cmd": [ "php artisan optimize" ], "post-create-project-cmd": [ "php artisan key:generate" ] }, "config": { "preferred-install": "dist" }, "minimum-stability": "dev" } 

Related of "У Composer заканчивается память на каждом проекте, Mac OS X"

EDIT: Прежде чем продолжить, убедитесь, что вы используете последнюю версию композитора, вы можете обновить его с помощью composer self-update

Когда вы запустите composer update он рассчитает самую последнюю версию gitref для каждой из ваших библиотек (или последнюю версию), а затем установит эту версию библиотеки. Затем он сохранит эти версии в файле composer.lock .

Когда вы запускаете composer install , он просто устанавливает версии, определенные в файле composer.lock .

Причина, по которой composer update так долго и использует так много памяти, состоит в том, что он должен отслеживать версию каждой библиотеки, сравнивать ее с версией, определенной вами в вашем composer.json а затем проверять все зависимости этой библиотеки. Это довольно интенсивный процесс.

Я нахожу, что работающий композитор с использованием hhvm (вы можете установить его здесь ) ускоряет процесс composer update массовом порядке.

Короче говоря, вам просто нужно жить с использованием высокой памяти и увеличить ее в файле php.ini . Убедитесь, что вы обновили тот, который имеет отношение к вашей CLI.

EDIT: вы никогда не должны запускать composer update в рабочей среде. Вы должны обновлять свои зависимости только при разработке, а затем использовать composer install для установки вашего последнего использованного набора зависимостей композитора, когда вы находитесь в производственной среде.

В настоящий момент на Composer появляется ошибка, из-за которой память будет исчерпана.

Если вы это сделаете

 composer install 

Затем удалите папку внутри поставщика

 rm -rf vendor/laravel 

и делай

 composer update 

Вы получите эту ошибку. Это ошибка, она не должна исчерпать память.

Пока вы можете исправить это для себя, выполнив:

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

Кроме того, проверьте этот поток , они собираются исправить это.

попробуй это. Это исправило мою проблему. Я думаю, что лучше исправить это, а не обновлять память.

 sudo composer self-update 

Просто введите следующие команды:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

Должна работать на устройствах с низкой памятью или других проблемах с памятью

Причина, по которой он занимал столько памяти, объясняется поведением Composer при обработке пакетов и ключевого слова replace.

Идея замены заключалась в том, что это позволило вам сделать две вещи:

  • Замените стандартную версию библиотеки своей собственной версией. например, если вы найдете пример в «symfony / yaml», вы можете его разветвить, исправить ошибку и затем отпустить ее в виде пакета «nightmicu / yaml». Затем вы можете сказать композитору, что «nightmicu / yaml» заменяет «symfony / yaml». Тогда любой другой пакет, который вы устанавливаете, который зависит от «symfony / yaml», будет удовлетворен наличием «nightmicu / yaml».

  • Это позволяет людям выпускать пакеты как отдельные компоненты, так и полную библиотеку, например, пакет фреймворка symfony заменяет каждый из своих пакетов компонентов.

Проблема в том, что ключевое слово replace, примерно до 1 часа назад, работало глобально по всему Packagist.

Это означает, что для популярных библиотек, которые были разветвлены и переименованы, существует огромное количество возможных версий для установки. Это то, что вызывало огромный объем использования памяти, и требует много времени для обработки.

Если вы получите последнюю версию composer.phar, теперь это будет лучше, так как «replace» теперь работает по-другому, только работая над пакетами, названными в корневом компоновщике. Json, то есть вы должны явно использовать пакет в своем composer.json чтобы он был заменен или действовал как замена, хотя я сам не смог его проверить.

Самый простой способ исправить это в Windows:

Перейти к: C: \ ProgramData \ ComposerSetup \ bin

Изменить композитор.bat

Измените его на:

 @ECHO OFF php -d memory_limit=-1 "%~dp0composer.phar" %* 

Сохраните файл и запустите:

композитор самопомощи