Aggiornare i pacchetti con composer e sapere cosa aggiornare
Su Febbraio 10, 2021 da adminSto appena iniziando a lavorare con Drupal 8 e composer e sto cercando di capire come eseguire laggiornamento il flusso di lavoro dovrebbe funzionare. Conosco le basi dellamministrazione di un server Drupal 7 da anni, ma la parte Composer mi sta facendo inciampare.
In questo momento corro, dalla cartella principale della mia installazione di Drupal, (con la modalità di manutenzione abilitata) composer outdated
e ottengo un elenco di una serie di pacchetti che necessitano di un aggiornamento.
Per quanto posso dire dalla documentazione, dovrei aggiornare solo i pacchetti che iniziano con “drupal /”. Supponendo che solo la console e il core risultino obsoleti, eseguo composer update drupal/console drupal/core --with-dependencies
e questo rimuove gli aggiornamenti e fa il suo dovere. Dopo aver fatto ciò, se eseguo di nuovo composer outdated
, vedo ancora un mucchio di pacchetti obsoleti secondo il compositore. È inteso? O dovrebbero essere aggiornati questi pacchetti?
Immagino che Drupal sia stato compilato utilizzando versioni specifiche di pacchetti, quindi aggiornarli tutti probabilmente romperebbe alcune cose, giusto? Come si suppone che qualcuno sappia quali pacchetti dovrebbero essere aggiornato e quali dovrebbero rimanere in una versione specifica?
Questo è ciò che ottengo quando eseguo composer outdated
.
alchemy/zippy 0.4.3 0.4.8 Zippy, the archive manager companion composer/installers v1.4.0 v1.5.0 A multi-framework Composer library installer consolidation/annotated-command 2.8.1 2.8.2 Initialize Symfony Console commands from annotated command class methods. consolidation/output-formatters 3.1.12 3.1.13 Format text by applying transformations provided by plug-in formatters. cweagans/composer-patches 1.6.2 1.6.4 Provides a way to patch Composer packages. dflydev/dot-access-data v1.1.0 v2.0.0 Given a deep data structure, access data by dot notation. drupal/php 1.0.0-beta1 1.0.0-beta2 Allows embedded PHP code/snippets to be evaluated. Enabling this can cause security and performance issues as it allows users to execute PHP code on your site. egulias/email-validator 1.2.14 2.1.3 A library for validating emails fabpot/goutte v3.2.1 v3.2.2 A simple PHP Web Scraper gabordemooij/redbean v4.3.4 v5.0 RedBeanPHP ORM jcalderonzumba/gastonjs v1.0.3 v1.2.0 PhantomJS API based server for webpage automation phpdocumentor/reflection-docblock 2.0.5 4.2.0 phpspec/prophecy v1.7.2 1.7.3 Highly opinionated mocking framework for PHP 5.3+ phpunit/php-code-coverage 2.2.4 5.3.0 Library that provides collection, processing, and rendering functionality for PHP code coverage information. phpunit/php-file-iterator 1.4.2 1.4.5 FilterIterator implementation that filters files based on a list of suffixes. phpunit/php-token-stream 1.4.11 2.0.2 Wrapper around PHP"s tokenizer extension. phpunit/phpunit 4.8.36 6.5.5 The PHP Unit Testing framework. phpunit/phpunit-mock-objects 2.3.8 5.0.6 Mock Object library for PHPUnit sebastian/comparator 1.2.4 2.1.1 Provides the functionality to compare PHP values for equality sebastian/diff 1.4.3 2.0.1 Diff implementation sebastian/environment 1.3.8 3.1.0 Provides functionality to handle HHVM/PHP environments sebastian/exporter 1.2.2 3.1.0 Provides the functionality to export PHP variables for visualization sebastian/global-state 1.1.1 2.0.0 Snapshotting of global state sebastian/recursion-context 1.0.5 3.0.0 Provides functionality to recursively process PHP variables sebastian/version 1.0.6 2.0.1 Library that helps with managing the version number of Git-hosted PHP projects symfony-cmf/routing 1.4.1 2.0.3 Extends the Symfony2 routing component for dynamic routes and chaining several routers symfony/browser-kit v3.3.10 v4.0.3 Symfony BrowserKit Component symfony/class-loader v3.2.14 v3.4.3 Symfony ClassLoader Component symfony/config v3.2.14 v4.0.3 Symfony Config Component symfony/console v3.2.14 v4.0.3 Symfony Console Component symfony/css-selector v3.3.10 v4.0.3 Symfony CssSelector Component symfony/debug v3.4.3 v4.0.3 Symfony Debug Component symfony/dependency-injection v3.2.14 v4.0.3 Symfony DependencyInjection Component symfony/dom-crawler v3.4.3 v4.0.3 Symfony DomCrawler Component symfony/event-dispatcher v3.2.14 v4.0.3 Symfony EventDispatcher Component symfony/expression-language v3.4.3 v4.0.3 Symfony ExpressionLanguage Component symfony/filesystem v3.4.3 v4.0.3 Symfony Filesystem Component symfony/finder v3.4.3 v4.0.3 Symfony Finder Component symfony/http-foundation v3.2.14 v4.0.3 Symfony HttpFoundation Component symfony/http-kernel v3.2.14 v4.0.3 Symfony HttpKernel Component symfony/process v3.2.14 v4.0.3 Symfony Process Component symfony/routing v3.2.14 v4.0.3 Symfony Routing Component symfony/serializer v3.2.14 v4.0.3 Symfony Serializer Component symfony/translation v3.2.14 v4.0.3 Symfony Translation Component symfony/validator v3.2.14 v4.0.3 Symfony Validator Component symfony/var-dumper v3.4.3 v4.0.3 Symfony mechanism for exploring and dumping PHP variables symfony/yaml v3.2.14 v4.0.3 Symfony Yaml Component twig/twig v1.35.0 v2.4.4 Twig, the flexible, fast, and secure template language for PHP webflo/drupal-finder 1.0.0 1.1.0 Helper class to locate a Drupal installation from a given path.
Questa è uninstallazione di Drupal abbastanza vanigliata. Ho solo pochi moduli aggiunti e un tema. Probabilmente dovrei anche menzionare che questo sito è stato creato utilizzando il modello di drupal-composer menzionato nei documenti ufficiali ( https://github.com/drupal-composer/drupal-project ).
Commenti
Risposta
Onestamente, per una base di codice come il tuo tipico sito Drupal, questo è un problema difficile da risolvere. Prendi, ad esempio, il mio codebase Drupal VM Prod , che ho appena aggiornato da Drupal core 8.4.5 a 8.5.0 ieri:
- Il mio vincolo di versione drupal / core in composer.json è
~8.4
- Lesecuzione
composer update drupal/core --with-dependencies
non ha “t aggiornato Drupal core; era bloccato a 8.4.5 - In esecuzione
composer update
(più dellopzione nucleare: aggiornerà tutto, inclusi i moduli contrib e qualsiasi altra dipendenza, che potrebbe causare problemi e rendere molto più difficile testare singoli aggiornamenti su un sito complesso!) ha funzionato per aggiornare il core di Drupal … ma non è lideale.
Così ho chiesto informazioni in merito nel problema il compositore non è riuscito a eseguire laggiornamento da 8.4.4 a 8.5.0-alpha1 e ha persino cercato di capire quale dipendenza stava bloccando il mio aggiornamento principale di Drupal utilizzando il Comando del compositore:
composer prohibits drupal/core:8.5.0
Questo elencava un sacco di diversi componenti di symfony … quindi potevo “essermi seduto lì e co ho incollato ciascuno dei 14 componenti nel mio comando composer update
, ma non è divertente da fare, quindi ho continuato a frugare (inutilmente).
Più avanti nel thread dei commenti, @eiriksm ha affermato che poiché il mio progetto ha symfony/config
(una dipendenza di drush e console drupal), dovevo eseguire composer update drupal/core symfony/config --with-dependencies
.
Non ho ancora idea di come avrei potuto “capire che dovevo solo aggiungere symfony/config
nel comando di aggiornamento (invece di aggiungere tutti gli altri symfony componenti) … ma se lo faccio, cercherò di aggiornare questa risposta con queste informazioni in modo che altri possano trarne vantaggio in futuro!
Commenti
- Ho anche scritto un post sul blog su questo argomento, con qualche informazione in più: Aggiornamento di drupal / core con Composer, ma Drupal core non ‘ t update
Answer
Aggiornamento delle versioni secondarie (8.3> 8.4, 8.4> 8.5) con il compositore è un incubo.
Sto arrivando alla conclusione che forse composer update
dovrebbe essere “abbracciato” e che si dovrebbero gestire attentamente le versioni del modulo in composer.json
forse bloccandoli tutti alle versioni attualmente installate, quindi cambiando la versione solo quando si desidera aggiornare il modulo. Non è davvero un grosso problema da fare.
Questo è davvero come lo facevamo prima del compositore. Abbiamo deciso quale modulo aggiornare uno per uno, non tutto in una volta, con drush up modulename
o altro.
Ciò potrebbe significare che linstallazione di moduli con numeri di versione specifici è una buona idea:
composer require "drupal/address:1.0"
non questo
composer require "drupal/address:~1.0"
Puoi sempre modificare "~1.0"
in "1.0"
più avanti in composer.json
, ma se installi un numero di versione specifico, non sarà necessario.
Commenti
- Aggiornamento di versioni secondarie (8.3 > 8.4, 8.4 > 8.5) con il compositore è un incubo. I ‘ ho eseguito circa 10 8.4 – > 8.5 aggiornamenti nellultima settimana, tutto tramite il compositore, tutto semplice come eseguire
composer update
, nessun problema con nessuno di essi. ‘ non sono sicuro di quale combinazione di cose stia facendo lottare le persone con questo, non ‘ t ha riscontrato un singolo problema con Drupal / Composer ancora - @Clive se solo vuoi aggiornare Drupal Core, un d non tutti i core, contrib e tutte le altre dipendenze e ‘ non stai bloccando una versione specifica per ogni altra cosa oltre a Core …
composer update
può avere molte conseguenze indesiderate. Per molti siti, di solito è abbastanza sicuro aggiornare tutto in ogni momento, ma per alcuni può essere un disastro. Prova sempre prima di andare in produzione!
composer show --tree
mostrerà lalbero delle dipendenze, esplorando che potrebbe aiutarti a determinare cosa richiede i pacchetti che devono essere aggiornati e informa una decisione. Potresti anche trovare github.com/webflo/drupal-core-strict utile, corregge le dipendenze principali di versioni note buone che potrebbero aiutarti ad aggiornare con più sicurezzacomposer update
e fare affidamento sul file composer.json per mantenere i pacchetti compatibili (allindirizzo almeno con il core)? E poi se qualcosa si interrompe su dev durante un aggiornamento, passo semplicemente attraverso ogni aggiornamento del pacchetto e scopro cosa ‘ sta causando il problema. Sembra avere senso.