Updating Drupal with Composer

nabbisen

nabbisen

Posted on October 8, 2019

Updating Drupal with Composer

Summary

All the steps to update Drupal 8 under PHP Composer are:

$ cd <drupal-dir>

$ # check outdated php modules
$ php-7.3 /usr/local/libexec/composer.phar outdated "drupal/*"
$ # update app
$ php-7.3 /usr/local/libexec/composer.phar update

$ # prepare symbolic link of php executable
# ln -s /usr/local/bin/php-7.3 /usr/local/bin/php

$ # update database
$ ./vendor/bin/drush updatedb
$ # clear cache
$ ./vendor/bin/drush cr

$ # check the whole result
$ ./vendor/bin/drush status
$ # remove symbolic link of php executable
# rm /usr/local/bin/php
Enter fullscreen mode Exit fullscreen mode

Points

  1. It is necessary to create php symbolic link for php-7.x executable in order to avoid the error "env: php: No such file or directory" at running drush.
  2. Don't use pkg_add drush because drush/drush is already included as Drupal's "require" in composer.json.
  3. Checking drush status finally is surely useful.

Tutorial

Case

8.7.7 -> 8.7.8

Get started

Go to the Drupal directory:

$ cd <drupal-dir>
Enter fullscreen mode Exit fullscreen mode

Update app

First, check which modules of Drupal core are outdated:

$ php-7.3 /usr/local/libexec/composer.phar outdated "drupal/*"
Enter fullscreen mode Exit fullscreen mode

The result was:

drupal/core 8.7.7 8.7.8 Drupal is an open source content management platform powering millions of ...
Enter fullscreen mode Exit fullscreen mode

Besides, the command to check the overall modules is:

$ php-7.3 /usr/local/libexec/composer.phar outdated
Enter fullscreen mode Exit fullscreen mode

The result was:

behat/mink-selenium2-driver             dev-master 8684ee4 dev-master 3ab9f31 Selenium2 (WebDriver...
dflydev/dot-access-data                 v1.1.0             v2.0.0             Given a deep data st...
doctrine/annotations                    v1.7.0             v1.8.0             Docblock Annotations...
drupal/core                             8.7.7              8.7.8              Drupal is an open so...
grasmash/yaml-expander                  1.4.0              2.0.0              Expands internal pro...
instaclick/php-webdriver                1.4.5              1.4.6              PHP WebDriver for Se...
league/container                        2.4.1              3.3.0              A fast and intuitive...
phar-io/manifest                        1.0.1              1.0.3              Component for readin...
phar-io/version                         1.0.1              2.0.1              Library for handling...
phpspec/prophecy                        1.8.1              1.9.0              Highly opinionated m...
phpunit/php-code-coverage               5.3.2              7.0.8              Library that provide...
phpunit/php-file-iterator               1.4.5              2.0.2              FilterIterator imple...
phpunit/php-timer                       1.0.9              2.1.2              Utility class for ti...
phpunit/php-token-stream                2.0.2              3.1.1              Wrapper around PHP's...
phpunit/phpunit                         6.5.14             8.4.0              The PHP Unit Testing...
phpunit/phpunit-mock-objects            5.0.10             6.1.2              Mock Object library ...
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
sebastian/comparator                    2.1.3              3.0.2              Provides the functio...
sebastian/diff                          2.0.1              3.0.2              Diff implementation
sebastian/environment                   3.1.0              4.2.2              Provides functionali...
sebastian/global-state                  2.0.0              3.0.0              Snapshotting of glob...
sebastian/resource-operations           1.0.0              2.0.1              Provides a list of P...
squizlabs/php_codesniffer               3.4.2              3.5.0              PHP_CodeSniffer toke...
symfony-cmf/routing                     1.4.1              2.1.0              Extends the Symfony2...
symfony/config                          v3.4.31            v4.3.4             Symfony Config Compo...
symfony/console                         v3.4.31            v4.3.4             Symfony Console Comp...
symfony/css-selector                    v3.4.31            v4.3.4             Symfony CssSelector ...
symfony/debug                           v3.4.31            v4.3.4             Symfony Debug Component
symfony/dependency-injection            v3.4.31            v4.3.4             Symfony DependencyIn...
symfony/dom-crawler                     v3.4.31            v4.3.4             Symfony DomCrawler C...
symfony/event-dispatcher                v3.4.31            v4.3.4             Symfony EventDispatc...
symfony/filesystem                      v3.4.31            v4.3.4             Symfony Filesystem C...
symfony/finder                          v3.4.31            v4.3.4             Symfony Finder Compo...
symfony/http-foundation                 v3.4.31            v4.3.4             Symfony HttpFoundati...
symfony/http-kernel                     v3.4.31            v4.3.4             Symfony HttpKernel C...
symfony/phpunit-bridge                  v3.4.31            v4.3.4             Symfony PHPUnit Bridge
symfony/process                         v3.4.31            v4.3.4             Symfony Process Comp...
symfony/routing                         v3.4.31            v4.3.4             Symfony Routing Comp...
symfony/serializer                      v3.4.31            v4.3.4             Symfony Serializer C...
symfony/translation                     v3.4.31            v4.3.4             Symfony Translation ...
symfony/validator                       v3.4.31            v4.3.4             Symfony Validator Co...
symfony/yaml                            v3.4.31            v4.3.4             Symfony Yaml Component
twig/twig                               v1.42.3            v2.12.0            Twig, the flexible, ...
typo3/phar-stream-wrapper               v2.1.2             v3.1.2             Interceptors for PHP...
vlucas/phpdotenv                        v2.6.1             v3.6.0             Loads environment va...
webflo/drupal-core-require-dev          8.7.7              8.7.8              require-dev dependen...
zaporylie/composer-drupal-optimizations 1.1.0              1.1.1              Composer plugin to i...
zendframework/zend-diactoros            1.8.7              2.1.3              PSR HTTP Message imp...
Enter fullscreen mode Exit fullscreen mode

Well, update them actually:

$ php-7.3 /usr/local/libexec/composer.phar update
Enter fullscreen mode Exit fullscreen mode

* Note: Adding --dry-run option to the above enables you to check what will be updated without actually updating.

The result was:

> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 0 installs, 7 updates, 0 removals
  - Updating zaporylie/composer-drupal-optimizations (1.1.0 => 1.1.1): Downloading (100%)         
  - Updating phpspec/prophecy (1.8.1 => 1.9.0): Downloading (100%)         
  - Updating squizlabs/php_codesniffer (3.4.2 => 3.5.0): Downloading (100%)         
  - Updating instaclick/php-webdriver (1.4.5 => 1.4.6): Downloading (100%)         
  - Updating doctrine/annotations (v1.7.0 => v1.8.0): Downloading (100%)         
  - Updating drupal/core (8.7.7 => 8.7.8): Downloading (100%)         
  - Updating webflo/drupal-core-require-dev (8.7.7 => 8.7.8)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
  - .csslintrc (https://git.drupalcode.org/project/drupal/raw/8.7.8/.csslintrc): Downloading (connectiDownloading (100%)         
  - .editorconfig (https://git.drupalcode.org/project/drupal/raw/8.7.8/.editorconfig): Downloading (coDownloading (100%)         
  - .eslintignore (https://git.drupalcode.org/project/drupal/raw/8.7.8/.eslintignore): Downloading (coDownloading (100%)         
  - .eslintrc.json (https://git.drupalcode.org/project/drupal/raw/8.7.8/.eslintrc.json): Downloading (Downloading (100%)         
  - .gitattributes (https://git.drupalcode.org/project/drupal/raw/8.7.8/.gitattributes): Downloading (Downloading (100%)         
  - .ht.router.php (https://git.drupalcode.org/project/drupal/raw/8.7.8/.ht.router.php): Downloading (Downloading (100%)         
  - .htaccess (https://git.drupalcode.org/project/drupal/raw/8.7.8/.htaccess): Downloading (connectingDownloading (100%)         
  - index.php (https://git.drupalcode.org/project/drupal/raw/8.7.8/index.php): Downloading (connectingDownloading (100%)         
  - robots.txt (https://git.drupalcode.org/project/drupal/raw/8.7.8/robots.txt): Downloading (connectiDownloading (100%)         
  - sites/default/default.services.yml (https://git.drupalcode.org/project/drupal/raw/8.7.8/sites/default/default.services.yml): Downloading (100%)         
  - sites/default/default.settings.php (https://git.drupalcode.org/project/drupal/raw/8.7.8/sites/default/default.settings.php): Downloading (100%)         
  - sites/development.services.yml (https://git.drupalcode.org/project/drupal/raw/8.7.8/sites/development.services.yml): Downloading (100%)         
  - sites/example.settings.local.php (https://git.drupalcode.org/project/drupal/raw/8.7.8/sites/example.settings.local.php): Downloading (100%)         
  - sites/example.sites.php (https://git.drupalcode.org/project/drupal/raw/8.7.8/sites/example.sites.php): Downloading (100%)         
  - update.php (https://git.drupalcode.org/project/drupal/raw/8.7.8/update.php): Downloading (connectiDownloading (100%)         
  - web.config (https://git.drupalcode.org/project/drupal/raw/8.7.8/web.config): Downloading (connectiDownloading (100%)         
> DrupalProject\composer\ScriptHandler::createRequiredFiles
Enter fullscreen mode Exit fullscreen mode

Update DB

Drush requires php executable.
So let's create it as a symbolic link:

# ln -s /usr/local/bin/php-7.3 /usr/local/bin/php
Enter fullscreen mode Exit fullscreen mode

Then, update the database:

$ ./vendor/bin/drush updatedb
Enter fullscreen mode Exit fullscreen mode

The result was:

 [success] No pending updates.
Enter fullscreen mode Exit fullscreen mode

Well, table definitions are sometimes changed here.

Next, clear cache:

$ ./vendor/bin/drush cr
Enter fullscreen mode Exit fullscreen mode
 [success] Cache rebuild complete.
Enter fullscreen mode Exit fullscreen mode

Validate

The things are almost done.

Check the whole status at last:

$ ./vendor/bin/drush status
Enter fullscreen mode Exit fullscreen mode

The result was:

 Drupal version   : 8.7.8
 Site URI         : http://default
 DB driver        : mysql
 DB hostname      : 127.0.0.1
 DB port          : 3306
 DB username      : <dbuser>
 DB name          : <database>
 Database         : Connected
 Drupal bootstrap : Successful
 Default theme    : bartik
 Admin theme      : bartik
 PHP binary       : /usr/local/bin/php-7.3
 PHP config       : /etc/php-7.3.ini
 PHP OS           : OpenBSD
 Drush script     : /var/www/<drupal-dir>/vendor/drush/drush/drush
 Drush version    : 9.7.1
 Drush temp       : /tmp
 Drush configs    : /var/www/<drupal-dir>/vendor/drush/drush/drush.yml
                    /var/www/<drupal-dir>/drush/drush.yml
 Install profile  : standard
 Drupal root      : /var/www/<drupal-dir>/drupal/web
 Site path        : sites/default
 Files, Public    : sites/default/files
 Files, Temp      : /tmp
Enter fullscreen mode Exit fullscreen mode

"Drupal version : 8.7.8" was got. O.K.

Clean up

Remove the symbolic link at last:

# rm /usr/local/bin/php
Enter fullscreen mode Exit fullscreen mode

Done

Now everything seems fine :)

available updates

status report

Reference

💖 💪 🙅 🚩
nabbisen
nabbisen

Posted on October 8, 2019

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Updating Drupal with Composer
drupal Updating Drupal with Composer

October 8, 2019