Спасибо, @Matteo,
Возможно ли, что проблема в оставшемся объеме оперативной памяти, доступной на сервере?
Я проверил ограничение объема памяти, но не думаю, что это проблема.
php-cli -i | grep memory
Тем не менее, я решил свою проблему. На самом деле есть три способа исправить это:
<сильный>1. Установите пакет без Composer
Это не рекомендуемое решение, но обычно очень полезно знать, как это сделать, особенно в очень устаревших проектах, и вас беспокоят проблемы, которые могут быть вызваны командой composer update
В этом руководстве предполагается, что у вас нет проблем с ограничением памяти на локальном сервере, и поэтому все команды прекрасно работают с composer .
Во-первых, вы должны установить пакет на свой локальный компьютер, например:
composer require jms/serializer-bundle
После того, как вы установили пакет, вам просто нужно добавить пакет в ваш файл AppKernel.php:
// in AppKernel::registerBundles()
$bundles = array(
// ...
new JMS\SerializerBundle\JMSSerializerBundle(),
// ...
);
Во-вторых, откройте composer.json из папки вашего пакета, например
// \vendor\jms\serializer-bundle\JMS\SerializerBundle\composer.json
"require": {
"php": ">=5.4.0",
"jms/serializer": "^1.0.0",
"phpoption/phpoption": "^1.1.0",
"symfony/framework-bundle": "~2.3|~3.0"
},
Для каждого пакета в разделе «требуется» откройте соответствующий файл composer.json, чтобы определить все необходимые пакеты.
Цель состоит в том, чтобы скопировать каталоги всех этих пакетов и загрузить их на удаленный сервер в каталог «vendor» (следя за тем, чтобы поддерживать ту же большую иерархию каталогов).
e.g:
если вы откроете composer.json из пакета jms/serializer, вы увидите:
// vendor/jms/serializer/composer.json
"require": {
"php": ">=5.4.0",
"jms/metadata": "~1.1",
"jms/parser-lib": "1.*",
"phpcollection/phpcollection": "~0.1",
"doctrine/annotations": "1.*",
"doctrine/instantiator": "~1.0.3"
},
Теперь вы должны открыть composer.json из jms/metadata, jms/parser-lib и phpcollection/phpcollection, чтобы определить другие пакеты, которые вы должны загрузить на удаленный сервер.
Цель состоит в том, чтобы не было пропущено ни одной зависимости.
наконец, откройте /vendor/composer/autoload_namespaces.php
с удаленного сервера и добавьте все пространства имен зависимостей вашего пакета. Вы должны сравнить этот файл с вашим локальным "autoload_namespaces.php".
<сильный>2. Добавление пространства подкачки
У вас есть три варианта: создать новый раздел подкачки, создать новый файл подкачки или расширить подкачку на существующем логическом томе LVM2. Рекомендуется расширить существующий логический том.
<сильный>3. обновить композитор на локальном компьютере, чтобы он устанавливался только на удаленном
Это рекомендуемый вариант для хорошей практики программирования. Когда composer update
будет выполнено в третьем проекте, мы не знаем, что может случиться не так, но когда у вас будет достаточно времени для разработки, и с этого момента проект будет вашим, вы должны полностью обновить проект. Сначала обновите свой локальный сервер с помощью composer update
и разрешите все возникающие конфликты. Наконец, с обновлением composer.json и composer.lock на сервере, теперь и навсегда нужно только запустить composer install
для установки и обновления всех зависимостей для новых пакетов.
Объяснение Маттео верно, команда composer update
занимает гораздо больше памяти, чем composer install
.
Но просто чтобы вы знали, вы обычно должны запускать обновление на своем компьютере, затем фиксировать/развертывать файл composer.lock и запускать установку только на своем сервере, чтобы синхронизировать зависимости с файлом блокировки, чтобы убедиться, что вы получаете только то, что вы протестировали правильно. Таким образом, вы также можете без проблем запускать сервер с небольшим объемом памяти.
person
Edgar Alfonso
schedule
04.04.2016
php -i | grep memory
дополнительная помощь здесь - person Matteo   schedule 04.04.2016