Composer hat bei jedem Projekt, Mac OS X, keinen Speicher mehr

9

Ich habe versucht, aws/aws-sdk-php gestern in einem meiner Laravel 4-Projekte mit Composer zu installieren. Ich kann mich nicht genau an die Ereigniskette erinnern, aber es wurde nicht erfolgreich installiert. Seitdem habe ich Fehler erhalten, dass der Composer keinen Speicher mehr hat - 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 .

Ich habe die php.ini memory_limit auf -1 erhöht und dies tritt immer noch auf, sowohl in meiner Entwicklungs- als auch in meinen Produktionsumgebungen (Produktion ist Cent OS 6). Die Installation wird erfolgreich abgeschlossen, wenn ich die memory_limit über die CLI anwähle, wenn ich composer_update ausführe, aber es dauert eine Ewigkeit.

Gibt es eine Art Cache, den ich löschen muss, um zu verhindern, dass Composer nicht genügend Arbeitsspeicher hat? Ich habe das Gefühl, dass es immer noch versucht, das AWS SDK jedes Mal zu installieren, wenn ich das Composer-Update ausführe.

Zusammenstellungsdatei

%Vor%     
NightMICU 16.02.2014, 18:35
quelle

6 Antworten

15

BEARBEITEN: Bevor Sie weitermachen, vergewissern Sie sich immer, dass Sie die neueste Version von composer verwenden. Sie können sie über composer self-update

aktualisieren

Wenn Sie composer update ausführen, berechnet es das aktuellste gitref für jede Ihrer Bibliotheken (oder die neueste Version) und installiert dann diese Version der Bibliothek. Es speichert dann diese Versionen in der Datei composer.lock .

Wenn Sie composer install ausführen, werden einfach die in der Datei composer.lock definierten Versionen installiert.

Der Grund dafür, dass composer update so lange dauert und so viel Speicher benötigt, ist, dass es die Version jeder Bibliothek verfolgen, sie mit der in composer.json definierten Version vergleichen und dann alle Abhängigkeiten dieser Bibliothek überprüfen muss. Dies ist ein recht intensiver Prozess.

Ich finde, dass Composer mit hhvm läuft (Sie können es installieren hier ) beschleunigt den Prozess composer update massiv.

Abgesehen davon müssen Sie nur mit der hohen Speicherbelegung leben und sie in Ihrer php.ini -Datei erhöhen. Stellen Sie sicher, dass Sie den für Ihre CLI relevanten aktualisieren.

BEARBEITEN: Sie sollten composer update niemals in der Produktionsumgebung ausführen. Sie sollten Ihre Abhängigkeiten nur während der Entwicklung aktualisieren und dann composer install verwenden, um den zuletzt verwendeten Satz von Composer-Abhängigkeiten zu installieren, wenn Sie sich in einer Produktionsumgebung befinden.

    
JamesHalsall 16.02.2014, 18:46
quelle
13

Im Moment gibt es einen Fehler im Composer, der dazu führt, dass der Speicher erschöpft ist.

Wenn Sie das tun

%Vor%

Löschen Sie dann einen Ordner im Anbieter

%Vor%

und machen

%Vor%

Sie erhalten diesen Fehler. Es ist ein Fehler, es sollte nicht der Speicher ausgehen.

Für jetzt können Sie es selbst reparieren, indem Sie tun:

%Vor%

Sieh dir auch diesen Thread an, sie werden das Problem beheben.

    
Antonio Carlos Ribeiro 17.02.2014 01:42
quelle
12

versuche das. Es hat mein Problem behoben. Ich denke, es ist besser, es zu reparieren als den Speicher zu aktualisieren.

%Vor%     
shivanshu patel 01.04.2014 13:15
quelle
3

Geben Sie einfach folgende Befehle ein:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

Sollte für wenig Speicher oder andere Speicherprobleme funktionieren

    
insign 30.08.2014 07:05
quelle
2

Der Grund, warum es so viel Speicherbedarf hat, ist das Verhalten von Composer bei der Behandlung von Paketen und das Schlüsselwort replace.

Die Idee hinter replace war, dass Sie zwei Dinge tun konnten:

  • Ersetzen Sie eine Standardbibliotheksversion durch Ihre eigene Version. z.B. Wenn Sie ein Beispiel in 'symfony / yaml' finden, können Sie es abzweigen, den Fehler beheben und es dann als Paket namens "nightmicu / yaml" veröffentlichen. Sie könnten dem Komponisten dann sagen, dass "nightmicu / yaml" "symfony / yaml" ersetzt. Dann wird jedes andere Paket, das Sie installieren, das von "symfony / yaml" abhängt, mit "nightmicu / yaml" zufrieden sein.

  • Es erlaubt Menschen, Pakete sowohl als einzelne Komponenten, als auch als komplette Bibliothek, z. Das Symfony-Framework-Paket ersetzt jedes seiner Komponentenpakete.

Das Problem besteht darin, dass das Schlüsselwort replace bis zu etwa einer Stunde global für den gesamten Packagist funktioniert hat.

Dies bedeutet, dass es für beliebte Bibliotheken, die gegabelt und umbenannt wurden, eine große Anzahl von möglichen Versionen gibt, die installiert werden müssen. Dies führte zu einer enormen Speichernutzung und einer langen Verarbeitungszeit.

Wenn Sie die neueste Version von composer.phar erhalten, sollte es jetzt besser sein, da 'ersetzen' jetzt anders funktioniert, indem Sie nur Pakete bearbeiten, die im root composer.json benannt sind, dh Sie müssen explizit ein Paket in Ihrem verwenden composer.json, um es entweder ersetzbar oder als Ersatz zu haben, obwohl ich es nicht selbst testen konnte.

    
Danack 21.02.2014 14:20
quelle
1

Der einfachste Weg, dies unter Windows zu beheben, ist:

Gehe zu: C: \ ProgramData \ ComposerSetup \ bin

Bearbeiten Sie composer.bat

Ändern Sie es in:

%Vor%

Speichern Sie die Datei und führen Sie sie aus:

Komponisten-Selbstaktualisierung

    
Digital Human 22.09.2016 13:07
quelle

Tags und Links