9.1.3 から 9.2.0 へのアップデートでエラー

9.2.0 へのアップデートでエラーを生じるサイトが複数ございます。
運用開始時のバージョンは 8.5.x や 9.1.x など様々ですが、いずれも 9.1.3 からのアップデートです。

キャッシュはすべて無効でエラーのデバッグ出力を表示する設定になっています。
試行した手順は以下の通りです。

  1. concrete ディレクトリを 9.2.0 へ置き換えて c5:update を実行
    [New in 9.2: Major Features]ダイアログが表示されます。

  2. [Next]、[Done]とクリック
    [エラー]ダイアログに以下が表示されます。
    サイトによって差異はありますが、最初の部分は同じです。

An exception occurred while executing ‘SELECT t0.uID AS uID_1, t0.uName AS uName_2, t0.uEmail AS uEmail_3, t0.uPassword AS uPassword_4, t0.uIsActive AS uIsActive_5, t0.uIsFullRecord AS uIsFullRecord_6, t0.uIsValidated AS uIsValidated_7, t0.uDateAdded AS uDateAdded_8, t0.uLastPasswordChange AS uLastPasswordChange_9, t0.uDateLastUpdated AS uDateLastUpdated_10, t0.uHasAvatar AS uHasAvatar_11, t0.uLastOnline AS uLastOnline_12, t0.uLastLogin AS uLastLogin_13, t0.uPreviousLogin AS uPreviousLogin_14, t0.uNumLogins AS uNumLogins_15, t0.uLastAuthTypeID AS uLastAuthTypeID_16, t0.uLastIP AS uLastIP_17, t0.uTimezone AS uTimezone_18, t0.uDefaultLanguage AS uDefaultLanguage_19, t0.uIsPasswordReset AS uIsPasswordReset_20, t0.uHomeFileManagerFolderID AS uHomeFileManagerFolderID_21, t0.ignoredIPMismatches AS ignoredIPMismatches_22, t23.usID AS usID_24, t23.uID AS uID_25, t23.createdBy AS createdBy_26 FROM Users t0 LEFT JOIN UserSignups t23 ON t23.uID = t0.uID WHERE t0.uID = ? LIMIT 1’ with params [“1”]:

SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘t0.ignoredIPMismatches’ in ‘field list’

詳細
インストールディレクトリ/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php(79): Doctrine\DBAL\Exception\InvalidFieldNameException->null
インストールディレクトリ/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php(182): Doctrine\DBAL\Driver\AbstractMySQLDriver->convertException
インストールディレクトリ/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php(159): Doctrine\DBAL\DBALException->wrapException
インストールディレクトリ/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(2226): Doctrine\DBAL\DBALException->driverExceptionDuringQuery
インストールディレクトリ/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(1313): Doctrine\DBAL\Connection->handleExceptionDuringQuery
インストールディレクトリ/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Exception.php(18): Doctrine\DBAL\Driver\PDO\Exception->null
インストールディレクトリ/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php(119): Doctrine\DBAL\Driver\PDO\Exception->new
インストールディレクトリ/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php(117): PDOException->null
インストールディレクトリ/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php(117): PDOStatement->execute
インストールディレクトリ/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(1304): Doctrine\DBAL\Driver\PDOStatement->execute
インストールディレクトリ/concrete/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php(750): Doctrine\DBAL\Connection->executeQuery
インストールディレクトリ/concrete/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php(241): Doctrine\ORM\Persisters\Entity\BasicEntityPersister->load
インストールディレクトリ/concrete/src/User/UserInfoRepository.php(133): Doctrine\ORM\EntityRepository->findOneBy
インストールディレクトリ/concrete/src/User/UserInfoRepository.php(33): Concrete\Core\User\UserInfoRepository->get
インストールディレクトリ/concrete/src/User/UserInfo.php(1142): Concrete\Core\User\UserInfoRepository->getByID
インストールディレクトリ/concrete/src/User/User.php(176): Concrete\Core\User\UserInfo->getByID
インストールディレクトリ/concrete/src/Announcement/AnnouncementService.php(96): Concrete\Core\User\User->getUserInfoObject
インストールディレクトリ/concrete/controllers/backend/announcement.php(22): Concrete\Core\Announcement\AnnouncementService->markAnnouncementAsViewed
インストールディレクトリ/concrete/src/Controller/AbstractController.php(318): Concrete\Controller\Backend\Announcement->markAsViewed
インストールディレクトリ/concrete/src/Controller/AbstractController.php(318): null->call_user_func_array
インストールディレクトリ/concrete/src/Routing/ControllerRouteAction.php(64): Concrete\Core\Controller\AbstractController->runAction
インストールディレクトリ/concrete/src/Http/RouteDispatcher.php(37): Concrete\Core\Routing\ControllerRouteAction->execute
インストールディレクトリ/concrete/src/Http/Middleware/DispatcherDelegate.php(39): Concrete\Core\Http\RouteDispatcher->dispatch
インストールディレクトリ/concrete/src/Http/Middleware/MiddlewareStack.php(86): Concrete\Core\Http\Middleware\DispatcherDelegate->next
インストールディレクトリ/concrete/src/Http/DefaultDispatcher.php(127): Concrete\Core\Http\Middleware\MiddlewareStack->process
インストールディレクトリ/concrete/src/Http/DefaultDispatcher.php(60): Concrete\Core\Http\DefaultDispatcher->handleDispatch
インストールディレクトリ/concrete/src/Http/Middleware/DispatcherDelegate.php(39): Concrete\Core\Http\DefaultDispatcher->dispatch
インストールディレクトリ/concrete/src/Http/Middleware/FrameOptionsMiddleware.php(39): Concrete\Core\Http\Middleware\DispatcherDelegate->next
インストールディレクトリ/concrete/src/Http/Middleware/MiddlewareDelegate.php(50): Concrete\Core\Http\Middleware\FrameOptionsMiddleware->process
インストールディレクトリ/concrete/src/Http/Middleware/StrictTransportSecurityMiddleware.php(36): Concrete\Core\Http\Middleware\MiddlewareDelegate->next
インストールディレクトリ/concrete/src/Http/Middleware/MiddlewareDelegate.php(50): Concrete\Core\Http\Middleware\StrictTransportSecurityMiddleware->process
インストールディレクトリ/concrete/src/Http/Middleware/ContentSecurityPolicyMiddleware.php(36): Concrete\Core\Http\Middleware\MiddlewareDelegate->next
インストールディレクトリ/concrete/src/Http/Middleware/MiddlewareDelegate.php(50): Concrete\Core\Http\Middleware\ContentSecurityPolicyMiddleware->process
インストールディレクトリ/concrete/src/Http/Middleware/CookieMiddleware.php(35): Concrete\Core\Http\Middleware\MiddlewareDelegate->next
インストールディレクトリ/concrete/src/Http/Middleware/MiddlewareDelegate.php(50): Concrete\Core\Http\Middleware\CookieMiddleware->process
インストールディレクトリ/concrete/src/Http/Middleware/ApplicationMiddleware.php(29): Concrete\Core\Http\Middleware\MiddlewareDelegate->next
インストールディレクトリ/concrete/src/Http/Middleware/MiddlewareDelegate.php(50): Concrete\Core\Http\Middleware\ApplicationMiddleware->process
インストールディレクトリ/concrete/src/Http/Middleware/MiddlewareStack.php(86): Concrete\Core\Http\Middleware\MiddlewareDelegate->next
インストールディレクトリ/concrete/src/Http/DefaultServer.php(85): Concrete\Core\Http\Middleware\MiddlewareStack->process
インストールディレクトリ/concrete/src/Foundation/Runtime/Run/DefaultRunner.php(125): Concrete\Core\Http\DefaultServer->handleRequest
インストールディレクトリ/concrete/src/Foundation/Runtime/DefaultRuntime.php(102): Concrete\Core\Foundation\Runtime\Run\DefaultRunner->run
インストールディレクトリ/concrete/dispatcher.php(45): Concrete\Core\Foundation\Runtime\DefaultRuntime->run
インストールディレクトリ/index.php(2): null->require

  1. [エラー]ダイアログを閉じてページをリロード
    再度[New in 9.2: Major Features]ダイアログが表示され、以降手順 2 と 3 が繰り返されます。

以下を参考にいくつかのサイトで c5:entities:refresh を実行してみると、[エラー]ダイアログは表示されなくなりました。

[システムと設定]-[サーバー設定一覧]-[データベースエンティティ]-[Doctrine 開発モード]についても書かれているようですが、[オン]にしたことはありません。

ページの追加など簡単な動作確認では問題は見つかっておりませんが、アップデートが正常に完了しているのかは不明です。
この問題はアップデート実行前に何らかの手順を踏むことで回避できるのでしょうか。

Concrete CMS バージョン
9.1.3

PHP バージョン
8.0.x

サーバー
エックスサーバー

1 Like

@Jun_22 ご報告ありがとうございます。

おそらくなんですが、アップデートの際の DB の構造を書き換えるスクリプトが不十分になってしまっている可能性があります。

c5:entities:refresh コマンドを打つと、コアやパッケージなどに書いてあるDBの宣言や定義 (ORM や db.xml) をベースにデータベーステーブルを更新します。なので、こちらのコマンドを実行するとより確実にデータベースの構造を正しく修正できる可能性があります。

この問題はアップデート実行前に何らかの手順を踏むことで回避できるのでしょうか。

簡単にいうと、テスト環境などで予行演習するしかないと思います。

様々な方が様々なサイトDB構成になっているので、アップデートを実行してみないとわからないと思います。

(実は我々もすべてのサイトでできていないのですが😅)

新バージョンのベータ版や RC (製品評価版) がリリースされた際にテスト環境のアップデートを試して、問題があった箇所が、自分たちのカスタムコード、パッケージ・コア・アップデート自体の手順に問題があるかを検証し、各担当者に修正をお願いするなど、アップデートの手順書を作って気をつけるということになると思います。

よろしくお願いします。

ご回答ありがとうございます。

原因を切り分けるためフルサイト(Atomik)をクリーンインストールした環境でも試してみました。
[ユーザーID]は[admin]以外へ、[キャッシュと表示速度設定]はすべて無効に変更しています。

問題を生じたサイトのひとつと同じようにアップデートしていくと、9.1.3 => 9.2.0 で同じエラーが表示されました。
9.1.1 => 9.1.2 => 9.1.3 => 9.2.0

c5:entities:refresh を実行すると、[エラー]ダイアログが繰り返し表示される問題が解消する点も同じです。
この問題は 8.5.12 から 9.2.0 へのアップデートでは生じないようです。

テーマやコンテンツが原因でないとすると、エックスサーバーの環境の問題になりますでしょうか。
また本件エラー発生後に c5:entities:refresh を実行することで、アップデートが正常に完了したのと同じ状態になるのでしょうか。

1 Like

@Jun_22 返信が遅れてすいません。

9.1.3 => 9.2.0 で同じエラーが表示されました。

おそらく、というか、( GitHub かここのフォーラムかどこかで見た記憶があるのですが) 9.1.3 → 9.2.0 のアップデートをする時に、DBの内容を書き換えるアップグレードのスクリプトにバグがあるかもしれません。

エックスサーバーの環境の問題になりますでしょうか。

いえ、アップグレード部分のプログラムの問題だと思います。

ご回答ありがとうございます。
アップグレードのスクリプトにバグがあるかもしれない旨承知しました。

フルサイト(Atomik)をクリーンインストールした環境での一般的な話としてお伺いします。
本件エラー発生後に c5:entities:refresh を実行することで、アップデートが正常に完了したのと同じ状態になるのでしょうか。
あるいは c5:entities:refresh で[エラー]ダイアログの表示される問題が解消されても、アップデートが途中で止まっている等の理由で何かしらの不具合を生じている状態なのでしょうか。

フォーラムを拝見する限り本件問題が原因でアップデートできないという方はそれほど多くない印象です。
この程度は解決できる技術がないと Concrete CMS の運用は難しいということでしょうか…
アップデートの仕組みをよく理解できておらず、見当違いな質問をしておりましたらご容赦ください。
c5:entities:refresh ですべて解決するほど簡単ではないという場合は、問題の解消されたバージョンのリリースを待つことにいたします。

@Jun_22 昨日、うちのプロジェクト 9.1.3 環境のアップデートでも、c5:entities:refresh コマンドの実行が必要でした。

ほぼ、確定ですね。なにか、9.2.0 のアップデートスクリプト部分で不具合がある様です。

本件エラー発生後に c5:entities:refresh を実行することで、アップデートが正常に完了したのと同じ状態になるのでしょうか。

アップデートが正常に完了したのと同じ状況になりそうです。

フォーラムを拝見する限り本件問題が原因でアップデートできないという方はそれほど多くない印象です。

すでに既出のフォーラム記事が出ているので、他で同じ問題が発生しても、c5:entities:refresh で解決しているからと思われます。

アップデートの仕組みをよく理解できておらず、見当違いな質問をしておりましたらご容赦ください。
c5:entities:refresh ですべて解決するほど簡単ではないという場合は、問題の解消されたバージョンのリリースを待つことにいたします。

いえいえ。質問していただいて助かります!

この問題、エラー文が、 c5:entities:refresh コマンドで解決するべきものだと思います。

よろしくお願いします。

本件承知しました。
皆様がどのように対応されているのか分かりアップデートを進めることができそうです。
ご回答いただきありがとうございました。