Upgrade Laravel from 7.x to 8.x / Upgrade PHP7.2 to PHP8.0 / Upgrade jenssegers/laravel-mongodb on AWS Cloud9

PHPをUpgrade

  • sudo add-apt-repository ppa:ondrej/php
  • sudo apt-get update
  • sudo apt-get install libapache2-mod-php8.0
  • sudo a2dismod php7.2
  • sudo a2enmod php8.0
  • sudo apt-get install php8.0-dom php8.0-mbstring php8.0-zip php8.0-mysql php8.0-common
  • sudo apt-get install mcrypt  (deprecated)
  • sudo update-alternatives --config php

参考:

monteecristoo.hatenablog.com

monteecristoo.hatenablog.com

mongodb php driver をupgrade

  • sudo pecl install mongodb >>> 失敗

PHPを8.0にアップグレードするとpeclがエラーを吐き、インストールできなくなるのでpearもアップグレードする

  • sudo apt-get install php-pear
  • sudo pecl install mongodb >>> 成功

ここでmongodb のPHP extension がどのディレクトリにインストールされているか注目する。

PHPを複数のバージョンをインストールしている場合、不適なディレクトリにインストールされ、php.iniにextension=mongodb.so と加筆しても

composer update >>> 失敗

PHP Startup: Unable to load dynamic library 'xxx/mongodb.so' 

とエラーが出る。

php -i | grep -i extension_dir で使用中のバージョンのPHPに適用されるextension directory とpecl がextension をインストールするディレクトが違うことを確認する。

 

pecl が extension をどこにインストールする設定になっているかを確認。

pecl config-show で確認できるがphp -i | grep -i extension_dir と同一のディレクトリになっているにもかかわらず、実際にsudo pecl install EXTENSION をすると別のディレクトリにインストールされる。これを修正する必要がある。

php-config --extension-dir でPECL実際にインストールするディレクトを参照できる。

php-config --version で使用中のPHPと違うバージョンが適用されていると判明。

  • sudo apt-get install php8.0-dev

不敵なディレクトリにインストールされたmongodb extensionをアンインストールしてからもう一度インストール

  • sudo pecl uninstall mongodb
  • sudo pecl install mongodb

 

PHPが正しくバージョンアップされ、mongodb driver もアップデートされたので

/etc/php/8.0/cli/php.ini

に 『extension=mongodb.so』を加筆

 

laravel のプロジェクトディレクトリのcomposer.jsonでlaravel 、その他パッケージをアップデート

composer update  >>> successfully updated

 

参考:

sotarok.hatenablog.com

laboradian.com