Opdatering af pakker med komponist og ved, hvad der skal opdateres
On februar 10, 2021 by adminJeg er lige begyndt at arbejde med Drupal 8 og komponist, og jeg prøver at finde ud af, hvordan opdateringen workflow skal fungere. Jeg kender det grundlæggende fra administration af en Drupal 7-server i årevis, men komponistdelen udløser mig.
Lige nu kører jeg fra rodmappen til min Drupal-installation (med vedligeholdelsestilstand aktiveret) composer outdated
og jeg får en liste over en masse pakker, der har brug for en opdatering.
Så vidt jeg kan se fra dokumentationen, skal jeg kun opdatere de pakker, der starter med “drupal /”. Forudsat at kun konsollen og kernen kommer op som forældede, kører jeg composer update drupal/console drupal/core --with-dependencies
, og det trækker opdateringerne ned og gør sine ting. Når dette er gjort, hvis jeg kører composer outdated
igen, ser jeg stadig en masse pakker, der er forældede ifølge komponisten. Er det beregnet? Eller skal disse pakker opdateres?
Jeg gætter på, at Drupal er bygget ved hjælp af specifikke versioner af pakker, så opdatering af dem alle vil sandsynligvis bryde nogle ting, ikke? Hvordan skal nogen vide, hvilke pakker der skal være opdateret, og hvilke skal være i en bestemt version?
Dette får jeg, når jeg kører 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.
Dette er en temmelig vanilje Drupal-installation. Jeg har kun få moduler tilføjet og et tema. Jeg skal nok også nævne, at dette websted blev bygget ved hjælp af skabelonen drupal-komponist, der er nævnt i de officielle dokumenter ( https://github.com/drupal-composer/drupal-project ).
Kommentarer
Svar
Ærligt, for en codebase som dit typiske Drupal-sted er dette en svært problem at løse. Tag for eksempel min Drupal VM Prod kodebase, som jeg lige har opgraderet fra Drupal-kerne 8.4.5 til 8.5.0 i går:
- Min begrænsning i drupal / kerneversion i composer.json er
~8.4
- Kører
composer update drupal/core --with-dependencies
opdaterede ikke Drupal kerne; den sidder fast ved 8.4.5 - Kører
composer update
(mere af den nukleare mulighed – den opdaterer alt, inklusive bidragsmoduler og andre afhængigheder, hvilket kunne forårsage problemer og gøre det meget sværere at teste individuelle opdateringer på et komplekst sted!) arbejdede med at opgradere Drupal-kernen … men det er ikke ideelt.
Så jeg spurgte om det i udgaven komponist kunne ikke opgradere fra 8.4.4 til 8.5.0-alpha1 og forsøgte endda at finde ud af, hvilken afhængighed der blokerede min Drupal-kerneopgradering ved hjælp af Komponistkommando:
composer prohibits drupal/core:8.5.0
Dette angav masser af forskellige symfonikomponenter … så jeg kunne “have siddet der og co klistrede hver af de 14 komponenter ind i min composer update
kommando, men det er ikke sjovt at gøre, så jeg fortsatte med at kaste rundt (uden nytte).
Senere i kommentartråden nævnte @eiriksm, at da mit projekt har symfony/config
(en afhængighed af drush- og drupal-konsol), var jeg nødt til at køre composer update drupal/core symfony/config --with-dependencies
.
Jeg ved stadig ikke, hvordan jeg kunne “have fundet ud af, at jeg bare havde brug for at tilføje symfony/config
i opdateringskommandoen (vs tilføjelse af al den anden symfony komponenter) … men hvis jeg gør det, vil jeg prøve at opdatere dette svar med de oplysninger, så andre kan få gavn af det i fremtiden!
Kommentarer
- Jeg skrev også et blogindlæg om dette emne med lidt mere info: Opdatering af drupal / kerne med komponist – men Drupal-kerne gør ikke ‘ t opdatering
Svar
Opdatering af mindre versioner (8.3> 8.4, 8.4> 8.5) med komponist er et mareridt.
Jeg kommer til den konklusion, at måske composer update
skal “omfavnes”, og at man skal styre modulversioner omhyggeligt i composer.json
måske låse dem alle til de aktuelt installerede versioner og derefter kun ændre versionen, når du vil opdatere modulet. Det er virkelig ikke så stor en aftale at gøre.
Sådan gjorde vi det før komponisten. Vi besluttede, hvilket modul der skulle opdateres en efter en, ikke alt på én gang, med drush up modulename
eller hvad som helst.
Dette kan betyde, at installation af moduler med specifikke versionsnumre er en god idé:
composer require "drupal/address:1.0"
ikke dette
composer require "drupal/address:~1.0"
Du kan altid ændre "~1.0"
til "1.0"
senere i composer.json
, men hvis du installerer et specifikt versionsnummer, behøver du ikke.
Kommentarer
- Opdatering af mindre versioner (8.3 > 8.4, 8.4 > 8.5) med komponist er et mareridt. Jeg ‘ har gjort omkring 10 8.4 – > 8.5 opdateringer i den sidste uge, alt sammen gennem komponist, alt lige så simpelt som at køre
composer update
, ingen problemer med nogen af dem. Jeg ‘ Jeg er ikke sikker på, hvilken kombination af ting der får folk til at kæmpe med dette, jeg har ikke ‘ t ramt et enkelt problem med Drupal / Composer endnu - @Clive hvis du bare vil opdatere Drupal Core, en d ikke alle kerner, bidrag og alle andre afhængigheder, og du ‘ låser ikke i en bestemt version til alle andre ting udover Core …
composer update
kan have meget mange utilsigtede konsekvenser. For mange websteder er det normalt sikkert nok til at opdatere alt hele tiden, men for nogle kan det være en katastrofe. Test altid, inden du går i produktion!
composer show --tree
viser afhængighedstræet, browsing, der kan hjælpe dig med at bestemme, hvad der kræver pakkerne, der skal opdateres og informer en beslutning. Du kan også finde github.com/webflo/drupal-core-strict nyttigt, det løser kerneafhængigheder til kendte gode versioner, som kan hjælpe dig med at opdatere med mere selvtillidcomposer update
kommando og stole på composer.json-filen for at holde pakkerne kompatible (ved mindst med kernen)? Og hvis ting går i stykker på dev under en opdatering, går jeg bare gennem hver pakkeopdatering og finder ud af, hvad ‘ forårsager problemet. Synes at være fornuftigt.