2015-07-01 15 views
8

Ho un problema con compositore. Sto lavorando con git in un ambiente locale. Sono l'unico sviluppatore.Perché il compositore rimuove le mie dipendenze dalla distribuzione?

Quando ho bisogno di qualche altro dipendenze (o bisogno di cambiare alcune versioni), posso modificare il composer.json e corro composer install localmente.

Tutto bene.

Poi, quando tutto funziona a livello locale, consegno il mio modifiche (tra cui composer.json e composer.lock) e spingere al mio server di produzione.

A post-ricezione lo script aggiorna le origini ed esegue un composer install sul server remoto.

cosa ci si aspetta:

  • Compositore dovrebbe installare le nuove dipendenze in base al file dicomposer.lock.
  • Dovrei essere felice.

Cosa succede:

  • Composer è arrabbiato:

Attenzione: Il file di blocco non è al passo con le ultime modifiche in composer.json. Potresti avere delle dipendenze obsolete. Eseguire aggiornamento a aggiornarli.

  • Compositore rimuove tutte le dipendenze.
  • La mia produzione di è interrotta.
  • Ho un attacco di cuore
  • devo accedere al mio server tramite ssh ed eseguire una composer update per rendere le cose funzionano bene, ma so che un composer update non è consigliato su un server di produzione.

ecco l'output della sezione post-ricezione del compositore :

composer install 
Loading composer repositories with package information 
Installing dependencies (including require-dev) from lock file 
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them. 
    - Removing guzzle/guzzle (v3.9.3) 
    - Removing symfony/event-dispatcher (v2.7.1) 
    - Removing geoip/geoip (v1.15) 
    - Removing pimple/pimple (v3.0.0) 
    - Removing cocur/slugify (1.1.x-dev) 
    - Removing bentools/url (0.2) 
    - Removing bentools/simplexmlextended (1.2.0) 
Generating autoload files 

Che cosa sto facendo di sbagliato?

Grazie, Ben

risposta

5

Questo avviso

Attenzione: Il file di blocco non è al passo con le ultime modifiche in composer.json, si può essere sempre dipendenze obsoleti, aggiornamento correre per aggiornare loro.

si verifica quando il md5sum della vostra composer.json differisce da quello memorizzato nel composer.lock:

{ 
    "hash": "b15ed9405e8547867f74973ce8add172", 
    "packages": [ ... ] 
} 

Assicurarsi che il composer.json e composer.lock sono identicamente con i vostri locali (confrontare i loro md5sums) . Sospetto che qualcosa nella catena di distribuzione non li aggiorni correttamente.

Assicurati di aver aggiunto le dipendenze a livello locale con il comando require:

composer require new/package ~2.5 

o se composer.json stata modificata manualmente almeno eseguire

composer update new/package 

dopo che per ogni pacchetto inoltre aggiunto per assicurare che è stato aggiunto correttamente al tuo composer.lock.

Un altro approccio:
run composer update --lock in produzione. Questo aggiornerà l'hash nel tuo file di blocco, ma non aggiornerà i tuoi fornitori.

Quindi eseguire composer install per installare i fornitori dallo comoser.lock.

0

Quando ho bisogno di più dipendenze (o è necessario modificare alcune versioni), modifico il compositore.json ed eseguo l'installazione di compositore localmente.

Questo è sbagliato. È possibile modificare composer.json e quindi eseguire composer update oppure consentire a Composer di eseguire la modifica interna del file JSON ed eseguire semplicemente composer require new/package (facoltativamente con una versione).

In entrambi i casi, si dovrebbe finire con un file modificato composer.json e composer.lock, commettono SIA nel repository, e il risultato atteso è che il file di blocco conterrà tutti i pacchetti nelle versioni corrette, che dovrebbero essere installati in produzione con una corsa regolare composer install.

Si noti che il flusso di lavoro è ancora molto pericoloso. Se premi e Github non funziona, come faresti a installare gli ZIP?

+0

OK, lo farò in questo modo allora. Perché il github del caso è giù, qual è il tuo consiglio? – user4994579

+0

Né Git né Composer sono strumenti di distribuzione. Vengono utilizzati come tali, ma ciò non significa che sia la soluzione migliore. In generale, avresti messo insieme uno ZIP o un TGZ contenente tutto il codice necessario per l'aggiornamento di produzione (incluso il codice in Git così come tutto da Composer), spostalo nella macchina di produzione, scompattalo, (testalo in un nascondiglio luogo - opzionale), quindi passare ad esso all'istante.Ci sono strumenti per questo - Capistrano è uno di questi. Per evitare i tempi di inattività di Github e un accesso più rapido, utilizzare Satis per creare una copia locale delle dipendenze che si utilizzano. I dettagli giustificano una nuova domanda. – Sven

Problemi correlati