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% BEARBEITEN: Bevor Sie weitermachen, vergewissern Sie sich immer, dass Sie die neueste Version von composer verwenden. Sie können sie über composer self-update
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.
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.
versuche das. Es hat mein Problem behoben. Ich denke, es ist besser, es zu reparieren als den Speicher zu aktualisieren.
%Vor%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.
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
Tags und Links php laravel-4 composer-php