Mautic(特に古いバージョンのもの)を最新版にアップデートする際、まれにsite is offline
になるケースがあります。
その場合は落ち着いて以下の2つを実施しましょう。
- サーバーのエラーログを確認する
- SSHして、symfonyコマンドを実行する
サーバーのエラーログを確認する
今回こちらで発生したケースでは、/var/log/httpd/ssl_error.log
に以下のエラーが出ていました。
[Sun Jan 07 02:14:31.417360 2018] [:error] [pid 9078] [client 111.232.123.80:57156] PHP Warning: require(/var/www/html/app/cache/prod/doctrine/orm/Proxies/__CG__MauticPluginBundleEntityPlugin.php): failed to open stream: No such file or directory in /var/www/html/vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php on line 209, referer: https://ec2-13-230-186-49.ap-northeast-1.compute.amazonaws.com/s/login
[Sun Jan 07 02:14:31.417396 2018] [:error] [pid 9078] [client 111.232.123.80:57156] PHP Fatal error: require(): Failed opening required '/var/www/html/app/cache/prod/doctrine/orm/Proxies/__CG__MauticPluginBundleEntityPlugin.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php on line 209, referer: https://ec2-13-230-186-49.ap-northeast-1.compute.amazonaws.com/s/login
SSHして、symfonyコマンドを実行する
php app/console cache:warmup --env=prod
でMauticが持っているキャッシュを削除することができます。
このコマンドを実行して、復旧しないか確認してみましょう。
これを実行後にサイトが復旧すれば、キャッシュによるものと思われます。
が、今回遭遇したケースでは以下のようにエラーが発生しました。
$ php app/console cache:warmup --env=prod
// Warming up the cache for the prod environment with debug false
[Doctrine\ORM\Mapping\MappingException]
Duplicate definition of column 'id' on entity 'Mautic\CoreBundle\Entity\MessageQueue' in a field or discriminator column mapping.
cache:warmup [--no-optional-warmers] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-s|--shell] [--process-isolation] [-e|--env ENV] [--no-debug] [--] <command>
Duplicate definition of column 'id' on entity 'Mautic\CoreBundle\Entity\MessageQueue' in a field or discriminator column mapping.
の対応
以下のようにすることで、サイトを復旧できました。
# rm app/bundles/CoreBundle/Entity/MessageQueue.php
# rm -rf app/cache/prod/ or sudo -u apache php app/console cache:warmup --env=prod
app/bundles/CoreBundle/Entity/MessageQueue.php
を削除することに抵抗がある場合、mv app/bundles/CoreBundle/Entity/MessageQueue.php /tmp
などで関係のない場所に移動させればOKです。
参考
https://github.com/mautic/mautic/issues/1508
https://github.com/mautic/mautic/issues/5459