Pakketten updaten met composer en weten wat ik moet updaten
Geplaatst op februari 10, 2021 door adminIk “begin net te werken met Drupal 8 en composer en ik probeer uit te zoeken hoe de update workflow zou moeten werken. Ik ken de basis van het jarenlang beheren van een Drupal 7-server, maar het Composer-gedeelte laat me struikelen.
Op dit moment voer ik uit vanuit de hoofdmap van mijn Drupal-installatie (met onderhoudsmodus ingeschakeld) composer outdated
en ik krijg een lijst met een aantal pakketten die een update nodig hebben.
Voor zover ik kan opmaken uit de documentatie, zou ik alleen de pakketten moeten updaten die beginnen met “drupal /”. Ervan uitgaande dat alleen de console en de kern verouderd zijn, voer ik composer update drupal/console drupal/core --with-dependencies
uit en dat haalt de updates naar beneden en doet zijn ding. Als ik dit gedaan heb en ik composer outdated
nogmaals draai, zie ik nog steeds een aantal pakketten die volgens composer verouderd zijn. Is dat de bedoeling? Of zouden deze pakketten moeten worden bijgewerkt?
Ik vermoed dat Drupal is gebouwd met behulp van specifieke versies van pakketten, dus als je ze allemaal zou updaten, zouden er waarschijnlijk dingen kapot gaan, toch? Hoe moet iemand weten welke pakketten zouden moeten zijn bijgewerkt en welke moeten bij een specifieke versie blijven?
Dit is wat ik krijg als ik composer outdated
gebruik.
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.
Dit is een vrij vanille Drupal-installatie. Ik heb maar een paar modules toegevoegd en één thema. Ik moet waarschijnlijk ook vermelden dat deze site is gebouwd met behulp van de drupal-composer-sjabloon die wordt vermeld in de officiële documenten ( https://github.com/drupal-composer/drupal-project ).
Reacties
Antwoord
Eerlijk gezegd, voor een codebase zoals uw typische Drupal-site is dit een moeilijk op te lossen probleem. Neem bijvoorbeeld mijn Drupal VM Prod codebase, die ik gisteren net heb geüpgraded van Drupal core 8.4.5 naar 8.5.0:
- Mijn drupal / core-versievoorwaarde in composer.json is
~8.4
- Running
composer update drupal/core --with-dependencies
is niet bijgewerkt Drupal core; het zat vast op 8.4.5 - Running
composer update
(meer van de nucleaire optie – het zal alles updaten, inclusief contrib-modules en eventuele andere afhankelijkheden, wat problemen zou kunnen veroorzaken en het veel moeilijker zou maken om individuele updates op een complexe site te testen!) werkte om Drupal core te upgraden … maar dat is niet ideaal.
Dus ik vroeg ernaar in het probleem composer slaagde er niet in om te upgraden van 8.4.4 naar 8.5.0-alpha1 , en probeerde zelfs uit te vinden welke afhankelijkheid mijn Drupal core-upgrade blokkeerde met behulp van de Componist commando:
composer prohibits drupal/core:8.5.0
Dit vermeldde een heleboel verschillende symfony componenten … dus ik had daar kunnen zitten en py-plakte elk van de 14 componenten in mijn composer update
commando, maar dat is niet leuk om te doen, dus bleef ik rondneuzen (het mocht niet baten).
Later in de commentaarthread zei @eiriksm dat aangezien mijn project symfony/config
heeft (afhankelijk van de drush en drupal console), ik composer update drupal/core symfony/config --with-dependencies
.
Ik heb nog steeds geen idee hoe ik erachter kwam dat ik gewoon symfony/config
moest toevoegen in het update-commando (in plaats van alle andere symfony componenten) … maar als ik dat doe, zal ik proberen dit antwoord bij te werken met die informatie zodat anderen er in de toekomst van kunnen profiteren!
Reacties
- Ik heb ook een blogpost over dit onderwerp geschreven, met wat meer info: Drupal / core updaten met Composer – maar Drupal core doet het niet ‘ t update
Answer
Kleine versies bijwerken (8.3> 8.4, 8.4> 8.5) met componist is een nachtmerrie.
Ik kom tot de conclusie dat composer update
misschien moet worden “omarmd” en dat men moduleversies zorgvuldig moet beheren in composer.json
misschien vergrendelt u ze allemaal op de momenteel geïnstalleerde versies en wijzigt u de versie alleen als u de module wilt bijwerken. Dat is echt niet zon groot probleem om te doen.
Dat is echt hoe we het deden voordat componist. We besloten welke module we een voor een moesten updaten, niet allemaal tegelijk, met drush up modulename
of wat dan ook.
Dit zou kunnen betekenen dat het installeren van modules met specifieke versienummers een goed idee is:
composer require "drupal/address:1.0"
niet dit
composer require "drupal/address:~1.0"
U kunt "~1.0"
altijd wijzigen in "1.0"
later in composer.json
, maar als je een specifiek versienummer installeert, hoef je dat niet “te doen.
Opmerkingen
- Bijwerken van secundaire versies (8.3 > 8.4, 8.4 > 8.5) met componist is een nachtmerrie. I ‘ hebben ongeveer 10 8.4 – > 8.5 updates gedaan in de afgelopen week, allemaal via componist, allemaal zo simpel als het uitvoeren van
composer update
, geen problemen met een van hen. Ik ‘ m weet niet zeker welke combinatie van dingen ervoor zorgt dat mensen hiermee worstelen, ik heb ‘ t heeft een enkel probleem met Drupal / Composer gehad. - @Clive als je alleen Drupal Core wilt updaten, een d niet alle core, contrib en alle andere afhankelijkheden, en je ‘ vergrendelt niet een specifieke versie voor elk ander ding behalve Core …
composer update
kan zeer veel onbedoelde gevolgen hebben. Voor veel sites is het meestal veilig genoeg om alles continu bij te werken, maar voor sommigen kan het een ramp zijn. Test altijd voordat u naar productie gaat!
composer show --tree
zal de afhankelijkheidsboom weergeven, bladeren die je kunnen helpen bepalen wat de pakketten nodig hebben die moeten worden bijgewerkt en informeer een beslissing. Mogelijk vindt u ook github.com/webflo/drupal-core-strict nuttig, het lost de kernafhankelijkheden van bekende goede versies op, waardoor je met meer vertrouwen kunt updaten.composer update
-opdracht kan gebruiken en vertrouw op het composer.json-bestand om de pakketten compatibel te houden (op minst met de kern)? En als er dan dingen kapot gaan op dev tijdens een update, loop ik gewoon door elke pakketupdate en ontdek wat ‘ s het probleem veroorzaken. Lijkt logisch.