Композитор загинув під час оновлення


116

У мене виникла проблема, я спробував встановити новий пакет до свого проекту Laravel 4. Але коли я бігаю, php composer.phar updateя отримую таке:

Loading composer repositories with package information
Updating dependencies (including require-dev)
Killed

Я шукав проблему в Інтернеті і побачив, що проблема в пам’яті, я думаю, що в мене недостатньо оперативної пам’яті, я перевірив це, у мене близько 411 Мб. Чи дійсно композитору потрібно більше оперативної пам’яті?

Відповіді:


293

Повідомлення "Убито" зазвичай означає, що ваш процес зайняв занадто багато пам'яті, тому вам, можливо, потрібно просто додати більше пам’яті до вашої системи, якщо це можливо. На момент написання цієї відповіді мені довелося збільшити пам’ять моєї віртуальної машини як мінімум на 768 Мб, щоб отриматиcomposer update до роботи в деяких ситуаціях.

Однак якщо ви робите це на живому сервері, ви не повинні використовувати це composer updateвзагалі. Що замість цього слід робити:

  1. Запуск composer updateу локальному середовищі (наприклад, на фізичному ноутбуці / робочому столі або контейнері докера / VM, що працює на вашому ноутбуці / робочому столі), де обмеження пам’яті не повинні бути настільки суворими.
  2. Завантажте або git pushфайл composer.lock.
  3. Запустити composer installна живому сервері.

composer installПотім читатиме з файлу .lock, отримуючи точні самі версії кожен раз, а не знаходячи останні версії кожного пакета. Це робить вашу програму менше шансів зламатись, а композитор використовує менше пам’яті.

Детальніше читайте тут: https://getcomposer.org/doc/01-basic-usage.md#installing-with-composer-lock

Крім того, ви можете завантажити весь vendorкаталог на сервер, обминаючи необхідність запуститись composer install, але тоді вам слід запустити composer dump-autoload --optimize.


5
Коли я завантажив composer.lock і запустив установку композитора, працював. Дякую!
Есан

Це не працює для мене, композитор був інсталятором apt, тому я виймаю його та встановлюю вручну, тоді все добре працює.
rafaelphp

2
У мене це питання на локальній машині.
afilina

Для місцевого розвитку обов'язково перейдіть за допомогою відповіді @ Balmipor або будь-якого іншого сервера з невеликою кількістю оперативної пам’яті.
Шон Півонка

72

Якщо мені подобається, ви користуєтеся мікро-VM, де бракує пам’яті, створення файлу swap виконує фокус:

#Check free memory before
free -m

mkdir -p /var/_swap_
cd /var/_swap_
#Here, 1M * 2000 ~= 2GB of swap memory.  Feel free to add MORE
dd if=/dev/zero of=swapfile bs=1M count=2000
mkswap swapfile
swapon swapfile
chmod 600 swapfile
#Automatically mount this swap partition at startup
echo "/var/_swap_/swapfile none swap sw 0 0" >> /etc/fstab

#Check free memory after
free -m

Як зазначалося в кількох коментарях, не забудьте додати sudo, якщо ви не працюєте як root.

btw, не соромтесь вибрати інше місце / ім’я / розмір для файлу.
/varце, мабуть, не найкраще місце, але я не знаю, яке місце було б, і рідко хвилююсь, оскільки крихітні сервери в основному використовуються для тестування.


4
Не забувайте про це sudo- мені довелося використовувати привілеї root для виконання цих команд.
MacDada

повернення swapon: swapfile: swapon failed: Operation not permitted, чому?
Мухаммед Діас Яскур

@Muhammad Dyas Yaskur Якщо у вас немає проблеми з дозволом (обов'язково працюйте як root або використовуйте sudo), чи є у вас ще щось особливе у вашій конфігурації (ОС, тип накопичувача тощо)?
Бальміпур

1
Найкраще запускати команди thsw в кореневій моделі. `` `Судо su```
dheeraj

1
@Balmipour Я використовую поле Laravel Homestead * Homestead v10.12.0, v11.0.2 * Settler v9.5.1 (Ubuntu 18.04) * Settler v10.0.0 (Ubuntu 20.04), я б подякував за те, що я зробив "sudo su", тоді це було б працював без судо.
Шон Півонка

19

На жаль композитору потрібно багато оперативної пам’яті та потужність для обробки. Ось декілька речей, які я зробив, які поєднали, зробили процес нестерпним. Це було на моїй хмарі playpen env.

  1. Можливо, вам просто не вистачає оперативної пам’яті. Увімкнути своп: https://www.digitalocean.com/community/search?q=add+swap (зауважте: я вважаю, що найкраща практика - додавати окремий розділ. Посібник Digitalocean підходить для їх середовища)
  2. service mysql stop (вбийте служби DB / mem-hog, щоб звільнити деяку оперативну пам’ять - не забудьте запустити її знову!)
  3. використовувати сеанс вторинного терміналу, який працює topдля перегляду споживання пам’яті / заміни до завершення процесу.
  4. composer.phar update --prefer-dist -vvv(багатослівний висновок [все ще висить у деяких точках під час роботи] та використовуйте distro zip-файли). Можливо, спробуйте--dry-run теж?
  5. Мабуть, композитор знає працювати повільніше в старих версіях PHP (наприклад, 5.3x). Це було ще повільно в 5.5.9 для мене ...

Я замінив topна htop, більш зручний.
DevonDahon

Також вивчіть створення файлу свопу
Харі Харкер

8

Виправлення DigitalOcean, яке не потребує додаткової пам'яті - активація свопу, ось приклад для 1 Гбіт:

в термінальному запуску нижче

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1

Вищевказане рішення працюватиме до наступного перезавантаження, після чого своп повинен бути повторно активований. Щоб зберегти його між перезавантаженнями, додайте файл swap до fstab:

sudo nano /etc/fstab

відкрити вищевказаний файл

/var/swap.1 swap swap sw 0 0

тепер перезапустіть сервер. Композитор вимагає чудових творів.


6

Запустіть composer self-updateта composer clearcache видаліть постачальника та composer.lock, перезавантажте місцеве середовище, а потім запустіть php -d memory_limit=-1 /usr/local/bin/composer install


2

Збільшити ліміт пам’яті для композитора

php -d memory_limit=4G /usr/local/bin/composer update

Можливо, потрібно буде перезавантажити після цієї зміни


1

У мене виникла помилка, коли я забіг composer installу свій контейнер PHP DOCKER, це проблема пам'яті. Вирішується за рахунок збільшення оперативної пам'яті SWAP у DOCKER PREFERENCES з 512 МБ до 1,5 Гб


і як це робити?
max4ever

клацніть правою кнопкою миші на значку Docker Desktop -> Налаштування -> Rousources
Inoubli

0

Я вважаю, що ця проблема викликана пакетом, який не оновлюється правильно за допомогою макетів, я використовую безпосередньо останню версію, і вона працює остаточно.

"l3 / cas-bundle": "~ 1.0" -------> "l3 / cas-bundle": "1.1.13"



0

Ось як мені вдалося встановити пакет maatwebsite \ excel від композитора в Laravel Framework:

  1. Я завантажую файл composer.json та файл composer.lock з віддаленого сервера.
  2. Я запускаю composer updateз локального командного рядка (тоді чекаю, поки завершиться процес встановлення).
  3. Завантажте файл composer.lock на віддалений сервер.
  4. бігати composer install на віддаленому сервері (тоді зачекайте, поки весь процес закінчиться).
  5. Зроблено


-1

Вирішено на Laravel / Homestead (Vagrant Windows)

  1. Редагуйте Homestead.yamlта збільшуйте пам’ять з 2048 до 4096

  2. бродячий

  3. бродячий ssh

  4. Встановіть Symfony за допомогою цього рядка у вибраній папці (повинна бути без файлів)

    COMPOSER_MEMORY_LIMIT=-1 composer create-project symfony/website-skeleton . -s dev

-2

Ви можете спробувати настройки preferred-installдля "dist"в Composer конфігурації.


Це питання стосується встановлення якогось проекту Laravel. Як ваша відповідь пов’язана з цим?
Ніко Хааз

Це питання стосується встановлення пакету. Зокрема, мова йде про проблеми з встановленням пакету, які пов'язані з ОЗУ. Чому я включив інформацію про WP у відповідь 2 роки тому? Не знаю. Зараз я оновив відповідь, яка IMO зараз дуже актуальна.
XedinНевідомо

-3

Я отримував цю помилку в локальному середовищі Докера. Я вирішив це, просто перезапустивши Docker.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.