さくらサーバでのバージョンアップ(8.5.2→9.1.3)が失敗します。

PHPのEOLを見越して、8.5.2から9.1.3最新へバージョンアップを試みました。
サーバ:さくらインターネット
現行:ver8.5.2
インストール対象:ver9.1.3
作業手順:
・concreteフォルダの置き換えで対応
→concreteフォルダの中身をすべて削除
→ver9.1.3のconcreteフォルダを設置(フォルダのパーミッション755、ファイルは644)
・さくらのPHPを8.0.21に変更
・サイトにアクセス

これで通常はアップデートが実行されるかと思いますが、エラーが発生しました。
ブラウザを更新するたびエラーが変化しますが、
Whoops \ Exception \ ErrorException (E_WARNING)

require(/*****/application/config/doctrine/proxies/__CG__ConcreteCoreEntitySiteSite.php): Failed to open stream: No such file or directory

のメッセージや、
An exception occurred while executing ‘SELECT t0.siteID AS siteID_1, t0.pThemeID AS pThemeID_2, t0.pThemeSkinIdentifier AS pThemeSkinIdentifier_3, t0.siteIsDefault AS siteIsDefault_4, t0.siteHandle AS siteHandle_5, t0.siteTypeID AS siteTypeID_6 FROM Sites t0’: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘t0.pThemeSkinIdentifier’ in ‘field list’

のメッセージが表示されます。

ここで、さくらインターネットが提供しているPHPが8.1ではなく8.0系であることに気づき、
concrete CMSの9.1.3がphp8.1での動作保証とインストール要件に書かれていたので、
9.0.2(php8.0で動作が確認されているもの)で改めてインストールを試みようとconcreteフォルダを置き換え、再度実行しました。

しかし、エラー内容は同じものが表示されました。
画像を添付します。

phpMyAdminで「SystemDatabaseMigrations」のテーブルを見ると、
version executed_at
20190309000000 2022-11-19 02:21:12
20190310000000 2022-11-19 02:21:12
20190416224702 2022-11-19 02:21:14
以降、20190516204806~20190925072201のレコードがあり、executed_atはすべてNULLでした。

ver9系で正しくアップデートさせるにはどうすればよろしいでしょうか。
ご教授ください。

まず先に8系の最新版にバージョンアップし、それから9にバージョンアップしてください。
メジャーバージョンアップの際は、常にこの手順が必要です。

1 Like

本件試しました。
8.5.2→8.5.3で実施しましたが、やはりエラーが出ました。
作業は、concreteフォルダの中身を対象バージョンで入れ替え(削除して追加)の手順で
実施しています。
ルートにあるcomposer.json,composer.lockのファイルも入れ替えましたがエラーになりました。
PHPはさくらの提供している7.4.30のまま(8.5.2も動作しているバージョン)です。

引き続き調査しておりますが、まだ原因が判明しません。
データベースが、mySQL 5.5だったことに気づき、5.7にアップグレードして既存ページに読み込ませました。
正しくサイトが表示されることを確認したうえで、もう一度8.5.2→8.5.3のアップデートを実施しましたが、添付のエラーが出ました。

【アップデート手順】
・ファイルマネージャーから、/concrete/配下のフォルダとファイルを削除
・8.5.3のインストールモジュールの/concrete/配下をzipでさくら上の上記フォルダに格納
・さくらのファイルマネージャーから、アップしたzipをサーバ側で解凍
→/concrete配下は、8.5.3の最新の内容で置き換わった状態。
フォルダは755、ファイルは644(rw-r–r–)の状態。
・ルートにあるcomposer.jsonなどは触らず。(8.5.2で設置したファイルのまま)
・この状態で、サイトにアクセスすると、上記の画像のエラーが発生。

【環境】
・PHP:7.4.30(モジュールモード)
・DB:MySQL5.7
サーバ接続の照合順序も、DB内の照合順序も「utf8mb4_general_ci」
・Perl:5.14.4

状況を打開できず、お知恵があればご教授をお願いいたします。

@backy さきほどは Gather にも来ていただきありがとうございました。
整理できました。

いろいろ試されているために、いろいろなエラーが出てしまっているようなので

  • 8.5.12 までアップデートをする
  • ブラウザからアップデートではなく、SSH 接続をしてコマンドラインからアップグレードしてみる
  • またアップグレードシェルスクリプトも作りました。YouTube の解説動画はこちらです

それではまず、8.5.12 へのアップグレードを SSH からできるかをお試しいただければと思います。

よろしくお願いします。

1 Like

@katz515
情報ありがとうございます。
SSHから実施してみましたが、ターミナル上でも8.5.3で発生した上記と同じエラーが出ました。。
8.5.2→8.5.12をトライしました。

In DBALException.php line 240:

Unknown column type “datetime_immutable” requested. Any Doctrine type that
you use has to be registered with \Doctrine\DBAL\Types\Type::addType(). You
can get a list of all the known types with \Doctrine\DBAL\Types\Type::getT
ypesMap(). If this error occurs during database introspection then you migh
t have forgot to register all database types for a Doctrine Type. Use Abstr
actPlatform#registerDoctrineTypeMapping() or have your custom types impleme
nt Type#getMappedDatabaseTypes(). If the type name is empty you might have
a problem with the cache or forgot some mapping information.

頂いた動画のshellスクリプトを使って再度トライしてみます。

本件何度も同じようなエラーを報告してしまいましたが、解決しました。原因は以下でした。
・アップデート失敗時に、DBを正しく元の状態に戻せていなかった

@katz515
頂いた情報をもとにして、事前に取得していたバックアップから、dbとapplication/configの中身をきちんと復旧し、もう一度8.5.2→8.5.3を実施してみました。
(ちなみに、アップデートする前の段階ではMySQLが5.5でしたので、DBも5.5で一度戻したうえでアップデートを実施しました)
すると、上記エラーなく、正常にアップデートできたことを確認できました。

@hissy @katz515
情報ありがとうございました。

いったんMySQLを5.5に戻したので、再度5.7でDBをリプレースしたうえで、
あらためてバージョンアップ作業を実施したいと思います。

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

1 Like