Aktualizowanie pakietów za pomocą narzędzia Composer i wiem, co należy zaktualizować
On 10 lutego, 2021 by adminWłaśnie zaczynam pracę z Drupal 8 i Composerem i próbuję dowiedzieć się, w jaki sposób aktualizacja przepływ pracy powinien działać. Znam podstawy z administrowania serwerem Drupal 7 przez lata, ale część Composer mnie denerwuje.
W tej chwili uruchamiam z folderu głównego instalacji Drupala (z włączonym trybem konserwacji) composer outdated
i otrzymuję listę pakietów wymagających aktualizacji.
O ile mogę stwierdzić z dokumentacji, powinienem aktualizować tylko te pakiety, które zaczynają się od „drupal /”. Zakładając, że tylko konsola i rdzeń okażą się przestarzałe, uruchamiam composer update drupal/console drupal/core --with-dependencies
, a to pobiera aktualizacje i robi swoje. Po wykonaniu tej czynności, jeśli ponownie uruchomię composer outdated
, nadal widzę kilka pakietów, które są nieaktualne według kompozytora. Czy to jest zamierzone? A może te pakiety powinny zostać zaktualizowane?
Zgaduję, że Drupal jest zbudowany przy użyciu określonych wersji pakietów, więc aktualizacja ich wszystkich prawdopodobnie zepsułaby niektóre rzeczy, prawda? Skąd ktoś ma wiedzieć, jakie pakiety powinny być zaktualizowane i które z nich powinny pozostać w określonej wersji?
Oto, co otrzymuję po uruchomieniu 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.
To dość prosta instalacja Drupala. Mam tylko kilka dodanych modułów i jeden motyw. Powinienem również wspomnieć, że ta strona została zbudowana przy użyciu szablonu drupal-composer wspomnianego w oficjalnej dokumentacji ( https://github.com/drupal-composer/drupal-project ).
Komentarze
Odpowiedź
Szczerze mówiąc, w przypadku bazy kodu takiej jak typowa witryna na Drupalu jest to trudny problem do rozwiązania. Weźmy na przykład mój kod Drupal VM Prod , który właśnie zaktualizowałem wczoraj z rdzenia Drupala 8.4.5 do 8.5.0:
- Moje ograniczenie wersji drupal / core w pliku composer.json
~8.4
- Uruchomiono
composer update drupal/core --with-dependencies
nie zaktualizowano Rdzeń Drupala; utknął na 8.4.5 - Uruchomiono
composer update
(więcej opcji jądrowej – zaktualizuje wszystko, w tym moduły wkładów i wszelkie inne zależności, co może powodować problemy i utrudniać testowanie poszczególnych aktualizacji w złożonej witrynie!) działało przy aktualizacji rdzenia Drupala … ale to nie jest idealne.
Więc zapytałem o to w problemie kompozytor nie zaktualizował wersji 8.4.4 do 8.5.0-alpha1 , a nawet próbował dowiedzieć się, która zależność blokuje moją aktualizację rdzenia Drupala za pomocą Polecenie kompozytora:
composer prohibits drupal/core:8.5.0
To zawierało mnóstwo różnych komponentów symfony … więc mogłem tam siedzieć i współpracować py-wkleiłem każdy z 14 składników do mojej komendy composer update
, ale nie jest to zabawne, więc dalej grzebałem (bez skutku).
W dalszej części komentarza @eiriksm wspomniał, że ponieważ mój projekt ma symfony/config
(zależność drush i konsoli drupal), muszę uruchomić composer update drupal/core symfony/config --with-dependencies
.
Nadal nie mam pojęcia, jak mogłem „zorientować się, że potrzebowałem tylko dodać symfony/config
do polecenia aktualizacji (w porównaniu z dodaniem wszystkich innych symfony komponentów) … ale jeśli to zrobię, spróbuję zaktualizować tę odpowiedź o te informacje, aby inni mogli skorzystać w przyszłości!
Komentarze
- Napisałem również post na blogu na ten temat, zawierający trochę więcej informacji: Aktualizacja drupal / core za pomocą Composera – ale rdzeń Drupala nie ' t aktualizuj
Odpowiedź
Aktualizowanie pomniejszych wersji (8.3> 8.4, 8.4> 8.5) z kompozytorem to koszmar.
Dochodzę do wniosku, że może composer update
powinno się „przyjąć” i że należy ostrożnie zarządzać wersjami modułów w composer.json
być może blokując je wszystkie do aktualnie zainstalowanych wersji, a następnie zmieniając wersję tylko wtedy, gdy chcesz zaktualizować moduł. To naprawdę nie jest taka wielka sprawa.
Tak naprawdę robiliśmy to przed kompozytorem. Zdecydowaliśmy, który moduł zaktualizować pojedynczo, a nie wszystkie na raz, za pomocą drush up modulename
lub czymkolwiek.
Może to oznaczać, że dobrym pomysłem jest zainstalowanie modułów o określonych numerach wersji:
composer require "drupal/address:1.0"
nie to
composer require "drupal/address:~1.0"
Zawsze możesz zmienić "~1.0"
na "1.0"
później w composer.json
, ale jeśli zainstalujesz określony numer wersji, nie musisz tego robić.
Komentarze
- Aktualizowanie podrzędnych wersji (8.3 > 8.4, 8.4 > 8.5) z kompozytorem to koszmar. I ' wykonaliśmy około 10 8.4 – > 8.5 aktualizacji w ciągu ostatniego tygodnia, wszystkie za pośrednictwem narzędzia Composer, wszystko tak proste, jak uruchomienie
composer update
, żadnych problemów z żadnym z nich. ' Nie jestem pewien, jaka kombinacja rzeczy sprawia, że ludzie mają z tym problemy, nie ' t napotkałeś jeszcze pojedynczy problem z Drupal / Composerem - @Clive, jeśli tylko chcesz zaktualizować Drupal Core, nie wszystkie elementy core, contrib i wszystkie inne zależności, a ty ' nie blokujesz żadnej konkretnej wersji dla wszystkich innych rzeczy poza Core …
composer update
może mieć bardzo wiele niezamierzonych konsekwencji. W przypadku wielu witryn zazwyczaj wystarczające jest ciągłe aktualizowanie wszystkiego, ale dla niektórych może to być katastrofa. Zawsze testuj przed przejściem do produkcji!
composer show --tree
wyświetli drzewo zależności, przeglądanie, które może pomóc ci określić, które pakiety wymagają aktualizacji i poinformuj o decyzji. Możesz również znaleźć github.com/webflo/drupal-core-strict przydatne, naprawia podstawowe zależności w znanych dobrych wersjach, co może pomóc ci aktualizować z większą pewnościącomposer update
i polegać na pliku composer.json, aby zachować zgodność pakietów (w najmniej z rdzeniem)? A jeśli coś się zepsuje na dev podczas aktualizacji, po prostu przejdę przez każdą aktualizację pakietu i sprawdzam, co powoduje problem '. Wydaje się, że ma to sens.