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
Points
- It is necessary to create
php
symbolic link forphp-7.x
executable in order to avoid the error "env: php: No such file or directory" at runningdrush
. - Don't use
pkg_add drush
becausedrush/drush
is already included as Drupal's "require" incomposer.json
. - 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>
Update app
First, check which modules of Drupal core are outdated:
$ php-7.3 /usr/local/libexec/composer.phar outdated "drupal/*"
The result was:
drupal/core 8.7.7 8.7.8 Drupal is an open source content management platform powering millions of ...
Besides, the command to check the overall modules is:
$ php-7.3 /usr/local/libexec/composer.phar outdated
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...
Well, update them actually:
$ php-7.3 /usr/local/libexec/composer.phar update
* 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
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
Then, update the database:
$ ./vendor/bin/drush updatedb
The result was:
[success] No pending updates.
Well, table definitions are sometimes changed here.
Next, clear cache:
$ ./vendor/bin/drush cr
[success] Cache rebuild complete.
Validate
The things are almost done.
Check the whole status at last:
$ ./vendor/bin/drush status
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
"Drupal version : 8.7.8" was got. O.K.
Clean up
Remove the symbolic link at last:
# rm /usr/local/bin/php
Done
Now everything seems fine :)
Top comments (2)
It might be worth noting that if you use a dockerized environment with composer and drush installed globally, you can run simpler commands like this:
composer update
drush entup
drush updb
drush cr
Hi Norah, Thank you for your comments.
I think you're totally right.
I have used OpenBSD, however, as my primary and lovely environment for years π
Well, I'm interested in dockerized environments and I'll try it. Thank you π