【環境情報】
・baserCMSのバージョン:5.0.14
・レンタルサーバー名:さくらインターネット レンタルサーバースタンダードプラン
・使用テーマ:bc_sample
・PHPスキル(自己評価):E
以下のエラーでアップデート出来ません。
xdebugは
を参照してインストール・有効化してあります。
db/baser.db
のバックアップをとり当該テーブルを削除した後、再度アップデートしたところ別のプラグインで同様のエラーが出たため、同様に対応したところエラーでCMSが動かなくなったため、バックアップから復旧した状態です。
ドキュメントルートから、composer.phar updateしてみましたが、そちらもうまくいきませんでした。
2024-06-02 19:22:15 info: BaserCore プラグイン 5.0.17 へのアップデートを開始します。
2024-06-02 19:22:15 info: BcBlog プラグイン 5.0.17 へのアップデートを開始します。
2024-06-02 19:22:15 info: BcContentLink プラグイン 5.0.17 へのアップデートを開始します。
2024-06-02 19:22:15 info: アップデート処理が途中で失敗しました。
2024-06-02 19:22:15 info: SQLSTATE[HY000]: General error: 1 table content_links
already exists
2024-06-02 19:22:15 error: Migration と アップデーターによるアップデートが失敗しました。
@tky.yuuki SQLiteの環境で、5.0.15 を作り、アップデートを実行しましたが、再現できませんでした。
db/baser.db
のバックアップをとり当該テーブルを削除した後
こちらについては、content_links already exists
のことを指しているのでしょうか?
つまり、 content_links
を削除してもダメだったということですか?
現在は、どのような状況でしょうか?
はい。
2024-06-11 09:30:02 info: SQLSTATE[HY000]: General error: 1 table custom_contents
already exists
となり、custom_contentsを削除すると
内部エラーが発生しました
An Internal Error Has Occurred.
エラー: アドレス ‘/baser/admin/baser-core/plugins/update’ に送信されたリクエストは無効です。
となります。
現在バックアップデータを戻してそのままです。
@tky.yuuki DBのマイグレーションがうまくいっていないみたいですね。。
baser_core_phinxlog
というテーブルの中身(レコード)が確認したいです。
こちらが空っぽの場合、対象の問題となる可能性が高いです。
@tky.yuuki ありがとうございます。
アップデート前に bc_content_link_phinxlog
というテーブルは存在しますか?
また、その中身はどうなってますでしょうか?
下記のようにデータが入っている場合は、システムとして、content_links
が作成済であり、そのように認識しているので、content_links
を作成しようとしないはずなんです。
有り難うございます。
テーブルはありますが、中身は空のようです。
@tky.yuuki 確認ありがとうございます。
データベースのマイグレーションの仕様上、マイグレーションが完了している場合には、phinxlog
テーブルにログが残らなければなりません。
BcContentLink プラグインにおいて、content_links
テーブルができているのであれば、bc_content_link_phinxlog
にログができているというのが正常な状態です。
今回、空になっていて、矛盾が発生しているので、アップデートがうまくいかないという事になります。
矛盾の再現確認
その矛盾が再現するか次の手順を実行しました。
- バージョン 5.0.15 を SQLiteで新規にインストール
- BcContentLink プラグインをインストール
bc_content_link_phinxlog
のレコードを確認 → ログあり
- アップデートを実行 → 成功
ということで再現ができず、どうしてその状況になったのかがまだ原因がわかりません。
回避策
ただ、phinxlog のログを手動で作成することで、アップデート時のエラーを回避することができます。
パターン1:SSHで phinxlog のログを作成
- SSHでサーバにログイン
- ドキュメントルートに移動
- コマンドを実行
bin/cake migrations mark_migrated -p BcContentLink
パターン2:PHPで phinxlog のログを作成
ロリポのエコノミープランなど、SSHが実行できない場合は、PHPで実行します。
- 次のファイルを作成
// migrate.php
<?php
$command = dirname(__DIR__);
$command .= '/bin/cake migrations mark_migrated -p BcContentLink';
exec($command, $output);
echo implode("<br>", $output);
- 上記のファイルをサーバー上の webroot ディレクトリ内にアップロード
- ブラウザで次のURLにアクセス
https://example.com/migrate.php
bc_content_link_phinxlog
のレコードを確認
- ログがあればアップデートを実行する
- migrate.php を削除
一度、試してみてください。
詳細に有り難うございます。
パターン1、の対応の繰り返しで最終的にアップデート出来ました。
bin/cake migrations mark_migrated -p BcContentLink
↓
別プラグインで同じエラー
↓
bin/cake migrations mark_migrated -p BcCustomContent
同様に
BcEditorTemplate 、BcFavorite 、BcUploader
とエラーが出る毎に対象プラグインに対し、同様に対応した結果無事アップデート出来ました。
(エラーが出たのは上記のプラグインのみだったようです。)
ログを確認したところ、
2024-06-15 17:19:40 info: アップデートプログラム 5.0.18 を実行します。
2024-06-15 17:19:40 info: /home/USERNAME/www/baser5/config/plugins.php に書き込み権限がありません。/home/USERNAME/www/baser5/vendor/baserproject/baser-core/config/update/5.0.18/config/plugins.php をコピーして手動で上書きしてください。
と有りましたので、SSHからcpで対象ファイルをコピーしました。
ご対応いただき有り難うございました。
必要な情報があれば分かる限りでお出しできます。