Warum entfernt Composer meine Abhängigkeiten von der Bereitstellung?

8

Ich habe ein Problem mit composer . Ich arbeite mit git in einer lokalen Umgebung. Ich bin der einzige Entwickler.

Wenn ich weitere Abhängigkeiten benötige (oder einige Versionen ändern muss), bearbeite ich die composer.json und führe composer install lokal aus.

Alles in Ordnung.

Dann, wenn alles lokal funktioniert, übertrage ich meine Änderungen (einschließlich composer.json und composer.lock ) und drücke auf meinen Produktionsserver.

Ein Post-receive Skript aktualisiert die Quellen und führt composer install auf dem Remote-Server aus.

Was wird erwartet:

  • Composer sollte die neuen Abhängigkeiten entsprechend der Datei composer.lock installieren.
  • Ich sollte glücklich sein.

Was passiert:

  • Komponist ist wütend:
  

Warnung: Die Sperrdatei ist nicht auf dem neuesten Stand mit den letzten Änderungen in   Komponist.json. Möglicherweise erhalten Sie veraltete Abhängigkeiten. Führen Sie das Update auf   update sie.

  • Composer entfernt alle Abhängigkeiten .
  • Meine Produktion ist kaputt .
  • Ich habe einen Herzinfarkt
  • Ich muss mich über ssh bei meinem Server anmelden und einen composer update ausführen, damit alles funktioniert, aber ich weiß, dass ein composer update auf einem Produktionsserver nicht empfohlen wird.

Hier sehen Sie die Ausgabe des Post-receive Komponistenabschnitts:

%Vor%

Was mache ich falsch?

Danke, Ben

    
user4994579 01.07.2015, 11:06
quelle

2 Antworten

5

Diese Warnung

  

Warnung: Die Sperrdatei ist nicht auf dem neuesten Stand mit den letzten Änderungen in composer.json, Sie erhalten möglicherweise veraltete Abhängigkeiten, führen Sie ein Update aus, um sie zu aktualisieren.

tritt auf, wenn sich die md5sum von composer.json von der in composer.lock gespeicherten unterscheidet:

%Vor%

Stellen Sie sicher, dass Ihre composer.json und composer.lock identisch mit Ihren lokalen sind (vergleichen Sie ihre md5sums ). Ich vermute, dass etwas in Ihrer Bereitstellungskette sie nicht korrekt aktualisiert.

Stellen Sie sicher, dass Sie Ihre Abhängigkeiten lokal mit dem Befehl require hinzugefügt haben:

%Vor%

oder wenn composer.json mindestens manuell bearbeitet wurde

%Vor%

danach für jedes zusätzlich hinzugefügte Paket, um sicherzustellen, dass es korrekt zu Ihrem composer.lock hinzugefügt wird.

Ein anderer Ansatz:
Führe composer update --lock in der Produktion aus. Dadurch wird der Hash in Ihrer Sperrdatei aktualisiert, die Anbieter werden jedoch nicht aktualisiert.

Führen Sie dann composer install aus, um die Anbieter von Ihrem comoser.lock zu installieren.

    
Pᴇʜ 01.07.2015 11:28
quelle
0
  

Wenn ich weitere Abhängigkeiten benötige (oder einige Versionen ändern muss), bearbeite ich die Datei composer.json und führe die Composer-Installation lokal aus.

Das ist falsch. Sie können composer.json bearbeiten und dann composer update ausführen, oder Sie lassen Composer die interne Bearbeitung der JSON-Datei ausführen und einfach composer require new/package ausführen (optional mit einer Version).

Wie auch immer, Sie sollten am Ende eine geänderte Datei composer.json und composer.lock haben, BOTH in Ihr Repository einbinden, und das erwartete Ergebnis ist, dass die Sperrdatei alle Pakete in den korrekten Versionen enthält, die installiert werden sollten in der Produktion mit einem normalen composer install Lauf.

Beachten Sie, dass Ihr Workflow immer noch sehr gefährlich ist. Wenn Sie drücken, und Github ist unten - wie würden Sie die ZIPs installieren?

    
Sven 01.07.2015 17:49
quelle

Tags und Links