経験知ロゴ

KUSANAGIでWordPressデータベースエラーが出る時の対処法

※本ページはプロモーションが含まれています

WordPress接続エラー

KUSANAGIでキャッシュを有効にし、サーバーのエラーログを見てみるとデータベースエラーがちょくちょく出ていました。

 [error] 3822#0: *2524 FastCGI sent in stderr: "PHP message: WordPress データベースエラー: Column 'type' cannot be null for query INSERT INTO `wp_site_cache` (`hash`, `content`, `device_url`, `type`, `post_type`, `headers`, `user_agent`, `server`, `updating`, `create_time`, `expire_time`) VALUES …

調べてみると、KUSANAGI独自のキャッシュプラグインで上手く動いていない部分があり、とりあえずエラーが出ないようにできたのでその方法を紹介します。

※KUSANAGI7.8での事例です。

プラグインの修正

エラーを見ると、「type」カラムはnullじゃダメだというので該当箇所を探す。

該当ファイルは、

/home/kusanagi/プロビジョニング名/DocumentRoot/wp-content/mu-plugins/kusanagi-core/modules/page-cache.php

になるので開く。

581行めから635行目までの間で、表示されるページの種類でtype分けをしている。

if ( is_front_page() ) {
	$type = 'front';
	$post_type = 'page';
	$life_time_key = 'home';
} elseif ( is_singular() ) {
	$type = 'single';
	…

その後キャッシュデータをデータベースに入れているが、404ページなどここで指定がされていないページでは「type」に何も代入されないのでエラーが出ている。

そこで、データベースに入れる前にtypeをチェックし、「null」でなければデータベースに入れるようにした。

656行目付近を変更

$cache_db->insert( $cache_db->prefix . 'site_cache', $data, array( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%s', '%s' ) );

if ( !is_null($data['type'] ) ) {
	$cache_db->insert( $cache_db->prefix . 'site_cache', $data, array( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%s', '%s' ) );
}

これでとりあえずエラーが出なくなった。

役に立ったらこの記事のシェアをお願いします

ブログのフォロー・RSS購読は下記ボタンから