8.5.7 から 9.1.2 へのアップデートでエラー

concrete ディレクトリを 9.1.2 へ置き換えて以下を実行したところエラーを生じました。
concrete/bin/concrete5 c5:update

キャッシュはすべて無効でデバッグモードは有効になっています。
どのような原因が考えられますでしょうか。

デバッグモード画面
Whoops \ Exception \ ErrorException (E_COMPILE_ERROR)
Declaration of DoctrineProxies_CG_\Concrete\Core\Entity\Site\Site::clearAttribute($ak) must be compatible with Concrete\Core\Entity\Site\Site::clearAttribute($ak, bool $doReindexImmediately = true)

コンソール画面
PHP Fatal error: Declaration of DoctrineProxies_CG_\Concrete\Core\Entity\Site\Site::clearAttribute($ak) must be compatible with Concrete\Core\Entity\Site\Site::clearAttribute($ak, bool $doReindexImmediately = true) in インストールディレクトリ/application/config/doctrine/proxies/_CG__ConcreteCoreEntitySiteSite.php on line 535
Whoops\Exception\ErrorException: Declaration of DoctrineProxies_CG
\Concrete\Core\Entity\Site\Site::clearAttribute($ak) must be compatible with Concrete\Core\Entity\Site\Site::clearAttribute($ak, bool $doReindexImmediately = true) in file インストールディレクトリ/application/config/doctrine/proxies/__CG__ConcreteCoreEntitySiteSite.php on line 535
Stack trace:

  1. Whoops\Exception\ErrorException->() インストールディレクトリ/application/config/doctrine/proxies/_CG__ConcreteCoreEntitySiteSite.php:535
    | array(1) {
    | [0]=>
    | string(200) "Declaration of DoctrineProxies_CG
    \Concrete\Core\Entity\Site\Site::clearAttribute($ak) must be compatible with Concrete\Core\Entity\Site\Site::clearAttribute($ak, bool $doReindexImmediately = true)"
    | }

  2. Whoops\Run->handleError() インストールディレクトリ/concrete/vendor/filp/whoops/src/Whoops/Run.php:486
    | array(4) {
    | [0]=>
    | int(64)
    | [1]=>
    | string(200) “Declaration of DoctrineProxies_CG_\Concrete\Core\Entity\Site\Site::clearAttribute($ak) must be compatible with Concrete\Core\Entity\Site\Site::clearAttribute($ak, bool $doReindexImmediately = true)”
    | [2]=>
    | string(122) “インストールディレクトリ/application/config/doctrine/proxies/__CG__ConcreteCoreEntitySiteSite.php”
    | [3]=>
    | int(535)
    | }

  3. Whoops\Run->handleShutdown() [internal]:0
    | array(0) {
    | }

Concrete CMS バージョン
8.5.7

PHP バージョン
7.4.x

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

@Jun_22 こんにちは。

以前でも 9.0.2 へのアップグレードの投稿と同じでしょうか?

具体的にサイトを見てみないとわからないのですが

  • Doctrine が更新されていない
  • 8.5.7 でエラーがある

が思いつきました。
(サイトの詳細がわからないので、勘レベルですいません)

現在のサイトは開発環境でしょうか?
一度、以下を試してもらえますか?

  • 一度、Docrrine のエンティティを更新してみる (コマンドは concrete/bin/concrete5 c5:entities:refresh です)
  • 一旦 8.5.12 にアップグレードしてから 9.1.3 にアップデートしてみる

よろしくお願いします。

こちらは未ログインのブラウザに表示されるメンテナンスモード画面が、メジャーアップデートではエラー画面になってしまうという趣旨の内容でした。
これは手順の不備によるものではなく「大幅にコードが変わってしまうため、仕方がない挙動」との回答をいただき解決しております。

ご教示いただいたコマンドを 8.5.7 で実行すると、以下が表示されました。

Doctrine cache cleared, proxy classes regenerated, entity database table schema updated.

メンテナンスモードを有効にして c5:update を実行すると、既にお伝えしているものと同じエラー画面が表示されました。

メンテナンスモードを有効にして concrete ディレクトリを 8.5.12 に入れ替えると、以下のエラー画面が表示されました。

Whoops \ Exception \ ErrorException (E_COMPILE_ERROR)
Declaration of DoctrineProxies\__CG__\Concrete\Core\Entity\Site\Site::clearAttribute($ak) must be compatible with Concrete\Core\Entity\Site\Site::clearAttribute($ak, $doReindexImmediately = true)

c5:update を実行すると、8.5.12 へアップデートできました。
続いて concrete ディレクトリを 9.1.3 に入れ替えると、以下のエラー画面が表示されました。

Whoops \ Exception \ ErrorException (E_WARNING)
Creating default object from empty value

c5:update を実行すると、ログアウトしてメンテナンス画面が表示されました。
ログイン画面にアクセスすると、以下のエラー画面が表示されました。

Less_Exception_Parser
File `/インストールディレクトリ/concrete/css/build/vendor/font-awesome/variables.less` not found.

これは Manual Nav アドオンに起因するエラーで、アドオンをアップデートすると正常に表示されました。
https://forums.concretecms.org/t/8-5-7-8-5-9-9-1-1/3989

本件で 8.5.12 からのアップデートが 8.5.7 からのアップデートとは異なると分かりました。
これまで検証してきた中には 8.5.7 から 9.1.3 へ直接アップデートできたサイトもございますが、発覚していないだけで何かしら問題を生じているのかもしれません…

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

1 Like

I do not speak Japanese, but I had the same issue upgrading from 8.5.7 to 8.5.9. The way I solved it is… pretty odd…

Before the upgrade from 8.5.7 to 8.5.9, I visited 2 pages: The homepage, and a different page. Like the contact page or the about us page.

After the upgrade, I got the same error as you.

This is what fixed this for me:

concrete/bin/concrete5 orm:generate-proxies

Then I visited both the contact page, and the home page. I got 6 errors saying ““continue” targeting switch is equivalent to “break”. Did you mean to use “continue 2”?” I’ve edited all “continue” to “continue 2” and the websites worked again.

I hope this fixes it for V9!

1 Like

実は以下を参考に orm:generate-proxies も試したのですが、残念ながら当方環境では問題を解消できませんでした。

本件については上述の通り 8.5.7 => 8.5.12 => 9.1.3 の順にアップデートすることで解決できそうです。
事例をご案内くださいましてありがとうございました。

1 Like

@PATRICKKASIE Thanks for the comment!

Yes, running

concrete/bin/concrete5 orm:generate-proxies

command may help sometime, too!
Great input!

Unfortunately, it seems like…it didn’t work this time.
But it seems like gradual upgrade may work the best.

8.5.2 → 8.5.13 → 9.1.3

1 Like