композитор автоматически убивается из SSH

Я создал полное приложение на локальном компьютере, теперь попробуйте установить его на удаленный сервер, как я всегда делал (git pull, разрешение конфликтов, обновление объектов, очистка кеша...), но для моего нового приложения требуется несколько пакетов, поэтому после создания вытащить из github и разрешить конфликты, я пытаюсь установить пакеты, и у меня возникает одна и та же проблема со всеми из них.

введите здесь описание изображения

Мой сервер «убивает» процесс?

Я искал весь день, но не могу найти проблему. Моя конфигурация php из php.ini:

введите здесь описание изображения

Эта ошибка никогда не случалась раньше, и я установил много бандлов на этот сервер 2 года назад. Кто-то с подобным опытом?

Спасибо.

РЕДАКТИРОВАТЬ:

Я сделал "диагностику php composer.phar" и получил следующее:

введите здесь описание изображения

Проблема может быть в "composer.json"?


person Edgar Alfonso    schedule 04.04.2016    source источник
comment
взгляните на этот разговор github.com/composer/composer/issues/1815# issuecomment-16782526 это должно зависеть от ограничения памяти. Попробуйте увеличить лимит памяти php cli и повторите попытку.   -  person Matteo    schedule 04.04.2016
comment
для проверки правильной конфигурации памяти CLI выполните команду php -i | grep memory дополнительная помощь здесь   -  person Matteo    schedule 04.04.2016


Ответы (5)


Вероятно, это проблема, связанная с конфигурацией ограничения памяти PHP CLI. Вы можете диагностировать выделение памяти для CLI PHP с помощью команды:

php -i | grep memory

И посмотрите, какой php.ini для версии CLI, с помощью команды:

php -i | grep 'php.ini'

Кстати, я бы предложил правильный рабочий процесс разработки с зависимостью композитора следующим образом:

но просто чтобы вы знали, обычно вы должны запустить update на своем компьютере, затем зафиксировать/развернуть файл composer.lock и запустить только install на своем сервере, чтобы синхронизировать зависимости с файлом блокировки, чтобы убедиться, что вы получаете только то, что вы протестировали правильно. Таким образом, вы также можете без проблем запускать сервер с небольшим объемом памяти.

Надеюсь, это поможет

person Matteo    schedule 04.04.2016

Спасибо, @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
comment
Я заметил, что причиной этого был ограниченный максимальный объем памяти в моем докер-клиенте. - person AsTeR; 01.02.2021

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

person Mohamed Hany    schedule 14.12.2019

Вы можете установить пакет в каталог проекта на локальном компьютере, а затем загрузить все обновленные файлы, в основном это установленный пакет и его зависимости, которые находятся в папке поставщика, composer.json и composer.lock.

person mark    schedule 12.03.2021

Composer Update молча возвращает «Killed» # 1815

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo chmod 600 /var/swap.1
sudo /sbin/swapon /var/swap.1
person Muhammad Asif    schedule 03.10.2019