Muszę uruchomić aktualizację kompozytora na moim hostingu, więc loguję się przez ssh i próbuję uruchomić comand:
composer update
wewnątrz folderu / www, w którym mam instalacje laravel i composer
w kontakcie z moim dostawcą hostingu każą mi uruchomić polecenie:
php -d memory_limit=512M composer update
Uruchamiam to polecenie, ale otrzymuję komunikat: „Could not open file: composer”
Co robić? Jakie jest tutaj rozwiązanie?
php
laravel
ssh
composer-php
Andrzej
źródło
źródło
composer install
wystarczy. W twoim przypadku, korzystając z hostingu współdzielonego, myślę, że nie będzieszcomposer update
działać, więc jedynym sposobem jest zakup hostingu VPS, takiego jak Digital Ocean, Linode.Odpowiedzi:
Po uruchomieniu
composer update
system operacyjny zajrzy do skonfigurowanych ścieżek i spróbuje zlokalizować plik wykonywalny o tej nazwie.Uruchamiając
php composer update
Thecomposer
ciąg jest traktowana jako parametr do PHP, które nie są wyszukiwane w żadnej ścieżki. Aby go uruchomić, musisz podać pełną ścieżkę.Uruchomienie
which composer
powie ci, gdzie system operacyjny znajduje plik wykonywalny kompozytora, a następnie po prostu użyj pełnej ścieżki w poleceniu PHP:$>which composer /usr/local/bin/composer $>php -d memory_limit=512M /usr/local/bin/composer update ...
Pamiętaj, że 512 MB może być za mało. Uważam, że szczęśliwie zajmie 1 GB lub więcej, w zależności od liczby zależności, których używasz i różnorodności wersji, na które teoretycznie zezwalasz, tj. Jeśli pozwolisz Symfony
~2.3
, wtedy Composer poradzi sobie z dużo większą liczbą możliwych wersji w porównaniu do używania~2.7
.Pamiętaj również, że uruchomienie Composera na maszynie produkcyjnej nie jest najlepszym pomysłem. Musisz mieć dostęp do Github, być może podać dane dostępu, mieć zainstalowane narzędzia VCS i łatwo zepsujesz swoją witrynę, jeśli którykolwiek ze zdalnych serwerów hostingowych jest offline podczas aktualizacji. Lepszym pomysłem jest użycie Composera w systemie wdrożeniowym, który wykonuje wszystkie przygotowania, a następnie przenosi wszystkie pliki na serwer produkcyjny.
Aktualizacja
Teraz jest rok 2020, a sposób, w jaki Composer zarządza swoją pamięcią, nieco się zmienił. Najważniejsze jest to, że Composer sam zwiększy limit pamięci, jeśli napotka limit ustawiony zbyt nisko. To jednak natychmiast powoduje problem braku pamięci na maszynach, które mają za mało zainstalowanej pamięci. Możesz sprawić, by Composer zużywał mniej pamięci, ustawiając zmienną środowiskową, taką jak
COMPOSER_MEMORY_LIMIT=512M
, ale spowoduje to problemy, jeśli Composer będzie potrzebował więcej pamięci do prawidłowego działania.Mój główny punkt pozostaje prawdziwy: nie uruchamiaj Composera na maszynach, które mają za mało zainstalowanej pamięci. Potencjalnie potrzebujesz 1,5 GB wolnej pamięci, aby móc zaktualizować wszystko.
źródło
php -d memory_limit=-1 $(which composer) update
jest wygodniejszy, ponieważ nie ma potrzeby określania ścieżki kompozytora.php -d memory_limit=-1 $(which composer).phar update
Ustaw, aby używał tyle pamięci, ile chce:
COMPOSER_MEMORY_LIMIT=-1 composer update
źródło
COMPOSER_MEMORY_LIMIT=-1; export COMPOSER_MEMORY_LIMIT
. Albo zdefiniować go jako alias powłoki?alias memcomposer='COMPOSER_MEMORY_LIMIT=-1 composer'
, a następnie użyjmemcomposer
zamiastcomposer
Fatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 4096 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
Mam problemy z narzędziem Composer, ponieważ zajmuje on całą dostępną pamięć, a następnie proces zostaje zabity (w rzeczywistości komunikat wyjściowy to „Killed”)
Szukałem więc rozwiązania, które ograniczy użycie pamięci kompozytora.
Próbowałem (z odpowiedzi @Sven)
$ php -d memory_limit=512M /usr/local/bin/composer update
Ale to nie zadziałało, ponieważ
-> To z oficjalnej strony kompozytora.
Wtedy znalazłem polecenie, które działa:
$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update
Jednak w moim przypadku 512MB to za mało!
Źródło: https://www.agileana.com/blog/composer-memory-limit-troubleshooting/
źródło
COMPOSER_MEMORY_LIMIT=-1 composer require <package name>
Musiałem połączyć
COMPOSER_MEMORY_LIMIT
iwmemory_limit
linii poleceń:W systemie Windows:
set COMPOSER_MEMORY_LIMIT=99999999999&& php -d memory_limit=-1 composer.phar update
W systemie Linux:
export COMPOSER_MEMORY_LIMIT=99999999999 && php -d memory_limit=-1 composer.phar update
źródło
Jeśli jest wystarczająco dużo pamięci, kompozytor wykorzystałby ją wewnętrznie i uruchomiłby bez problemu. Nie trzeba specjalnie mówić kompozytorowi, żeby to zrobił.
Czy próbowałeś zwiększyć swoją pamięć wymiany, bo to zadziałało dla mnie. Zwiększyłem pamięć wymiany do 4096Mb (4GB) i teraz wszystko wygląda świetnie.
najpierw użyj „
sudo free
”, aby zobaczyć dostępną pamięć i wymienić pamięć. i skonfiguruj swap jako,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
aby było na stałe, dodaj to do pliku / etc / fstab,
/swapfile swap swap defaults 0 0
Dla 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
możesz zwiększyć swoją pamięć wymiany, zmieniając bs = 1024k lub 2048k lub 8096k w zależności od rozmiaru fizycznego woluminu. użyj poleceń „swapon” i swapoff, aby zobaczyć różnicę.
zaznacz 'swappiness' (60 powinno wystarczyć)
źródło
Możesz zmienić
memory_limit
wartość w swoim php.iniSpróbuj zwiększyć limit w pliku php.ini
Użyj -1 dla nieograniczonej liczby lub zdefiniuj jawną wartość, taką jak 2G
memory_limit = -1
Przeczytaj dokumentację getcomposer.org
źródło
Na MAC OS High Siera uruchomiłem poniższe:
Zwrócony:
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
Wszystkie powyższe odpowiedzi ustawiają załadowaną konfigurację, która się aktualizuje, ale zauważ, że dodatkowe przeanalizowane pliki .ini mają php-memory-limits.ini jako oddzielny plik. Musisz również zaktualizować limit pamięci plików. w ten sam sposób otwórz w edytorze tekstu i zmień na coś takiego jak 2G. Wynik błędu limitu pamięci powinien powiedzieć, ile pamięci potrzebuje do uruchomienia, po prostu ustaw go na wyższą lub -1 dla nieograniczonej.
źródło
Ten błąd może wystąpić zwłaszcza podczas aktualizowania dużych bibliotek lub bibliotek z wieloma zależnościami. Kompozytor może być bardzo głodny pamięci.
Upewnij się, że sam kompozytor został zaktualizowany do najnowszej wersji:
php composer.phar --self-update
Możesz tymczasowo zwiększyć limit pamięci dla kompozytora, dodając zmienną środowiskową limit pamięci kompozytora:
COMPOSER_MEMORY_LIMIT=128MB php composer.phar update
Użyj formatu „128M” dla megabajtów lub „2G” dla gigabajtów. Możesz użyć wartości „-1”, aby całkowicie zignorować limit pamięci.
Innym sposobem byłoby zwiększenie limitu pamięci PHP:
php -d memory_limit=512M composer.phar update ...
źródło
Dla mnie najlepszym rozwiązaniem jest
COMPOSER_MEMORY_LIMIT=-1 composer require <package-name>
wspomniane przez @realtebo
źródło
Jak duży jest Twój serwer AWS? Jeśli ma tylko 1 GB pamięci RAM, ustawienie limitu pamięci na 2 GB w php.ini nie pomoże.
Jeśli nie możesz / nie chcesz również zwiększać strony serwera, aby uzyskać więcej dostępnej pamięci RAM, możesz również włączyć SWAP.
Zobacz tutaj, jak włączyć zamianę. Umożliwia 4 GB, chociaż zazwyczaj sam robię tylko 1 GB.
Źródło: pochodzi z witryny Laracast
źródło
W moim przypadku żadna z odpowiedzi nie pomogła. W końcu okazało się, że przejście na 64-bitową wersję PHP (M $ Windows) natychmiast rozwiązało problem. Nie zmieniałem żadnych ustawień - po prostu działało.
źródło
Zrobiłem to na Widnows 10 i pracowałem ze mną:
php -d memory_limit=-1 C:/ProgramData/ComposerSetup/bin/composer.phar update
Możesz zmienić wartość xx , którą chcesz
źródło
Używam Laravel 6 z Homestead i też napotkałem ten problem. Jak sugerowano tutaj w innych odpowiedziach, możesz poprzedzić
COMPOSER_MEMORY_LIMIT=-1
pojedynczą komendę i uruchomić ją normalnie. Jeśli chcesz zaktualizować konfigurację PHP, aby zawsze zezwalać na nieograniczoną ilość pamięci, wykonaj następujące kroki.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
Dodaj
memory_limit=-1
do swojego pliku php.ini. Jeśli masz problemy z używaniem Vima lub edycją pliku php.ini, sprawdź tę odpowiedź o tym, jak edytować plik php.ini za pomocą Vima. Plik powinien wyglądać mniej więcej tak:; Maximum amount of memory a script may consume ; http://php.net/memory-limit memory_limit = -1
Zauważ, że może to pochłonąć nieskończoną ilość pamięci na twoim komputerze. Prawdopodobnie nie jest to dobry pomysł na produkcję lol. W przypadku Laravel Valet musiałem postępować zgodnie z tym artykułem i zaktualizować wartość pamięci tutaj:
sudo vi /usr/local/etc/php/7.4/conf.d/php-memory-limits.ini
Następnie zrestartuj serwer za pomocą Valet:
Ta odpowiedź była również pomocna przy zmianie konfiguracji z Laravel Valet na Macu, aby zmiany odniosły skutek.
źródło
<C:\>set COMPOSER_MEMORY_LIMIT=-1 <C:\>composer install exhausted/packages
źródło
Dla tych, którzy używają Laravel Homestead
Napisz to dalej
Homestead.yaml
variables: - key: COMPOSER_MEMORY_LIMIT value: -1
źródło
php ini
plikumemory_limit = -1
źródło
Dla Laravel
Krok 1. Otwórz terminal
krok 2.
cd
do katalogu laravelkrok 3. Wpisz polecenie
which composer
w katalogu laravel i zanotuj katalog, w którym znajduje się kompozytor.krok 4. uruchom polecenie
php -d memory_limit=-1 /opt/cpanel/bin/composer update
(możesz również uruchomić kod, jeśli działa dla Ciebie)(zmień
/opt/cpanel/bin/composer
na ścieżkę katalogu zwróconą w kroku 3)Problem rozwiązany
źródło
W moim przypadku potrzebował wyższych uprawnień wraz ze zwiększeniem limitu pamięci.
sudo COMPOSER_MEMORY_LIMIT=2G php /opt/bitnami/php/bin/composer.phar update
źródło
sudo
nie jest dobrym pomysłem, ponieważ spowoduje to pomieszanie uprawnień. Wygląda na to, że pracujeszcomposer update
na serwerze - jest to również zła praktyka, ponieważ znacznie bardziej różni się umieszczanie obliczonych zależności pod kontrolą wersji