WordPress CocoonテーマをSQLiteで動かしてみる

この記事は約4分で読めます。

このサイトはWordPressをSQLiteで動作させているが、毎日激しいエラーログに悩まされている。
一見問題なく動作しているが、どこかに問題があることは明らかである。
エアコンが復活して快適になったし、やめた方が良いと書きながら、まとまった時間が取れたので対策してみる。

まずは一番エラーが多い「Cocoon」の対策だ。半分くらいは「Cocoon」関連のエラーじゃ無いだろうか?
CocoonはWordPressのテーマの一つで、日本ではかなりのシェアを持っているとのこと。日本語のブログサイトを見ると、確かにこのテーマを使用したものがかなり多い。
自分もテーマとやらを使ってみたかったので、他のテーマを探しもせずに入れている。
エラーを解消するのであればアンインストールしてしまえば良いのだが、それでは何だかつまらない。
「まぁ有名どころだから、何処かに対策の方法があるだろう」と調べてみたが、何処にも情報が見つからなかった。。。
仕方が無い。自分でデバッグする他ない。

実のところ、OracleやSQL Serverは仕事で弄ったことがあるが、MySQLとSQLiteは全く操作したことが無い。ついでに言うと、ここ20年位まともにSQLすら操作していない。
丁度良い勉強の機会である。

色々調査したところ、「Cocoon」には以下のテーブルが必要の様である。
wp_cocoon_accesses
wp_cocoon_affiliate_tags
wp_cocoon_function_texts
wp_cocoon_item_rankings
wp_cocoon_speech_balloons

エラーログで頻発している「wp_cocoon_function_texts」のテーブルが無い。ついでに「wp_cocoon_accesses」も無かった。
どうやらMySQLとSQLiteの方言の差で、当初からテーブル作成に失敗していたようだ。

func-text-func.phpとaccess-func.phpの「CREATE TABLE」を参考に、SQLite用の互換テーブルを自前で作成して実行してみる。

CREATE TABLE wp_cocoon_function_texts (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  date datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
  modified datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
  title varchar(126) NOT NULL,
  text text NOT NULL,
  visible bit(1) DEFAULT 1 NOT NULL
);

CREATE TABLE wp_cocoon_accesses (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  post_id INTEGER,
  post_type varchar(126) DEFAULT 'post',
  date varchar(20),
  count INTEGER DEFAULT 0,
  last_ip varchar(40)
);

CREATE INDEX index_pid_ptype_date ON wp_cocoon_accesses (
  post_id,
  post_type,
  date
);

とりあえず問題はないようだ。調査も含めて2時間程度の作業だった。このまま1日放置してエラー状況を確認してみたが、見事に「wp_cocoon_function_texts」に関するエラーは無くなった。

このテーブルを使用している「テンプレート文(定型文)」の機能も問題なく動作しているようだ。
まだこの機能を使用していなかったので適切な動作が分からないが、テスト的な登録と呼び出しはできた。
アクセスログについても取れるようになった。ただSQLiteでアクセスログの様な激しいデータの書き込みは、あまりおすすめできない。この機能については引き続きオフのまま運用する予定だ。

この対策は「Cocoon」が使用しているデータベースのテーブルに変更が無い限り、今後特に何かする必要は無いだろう。実際にバージョン2.7.5.1から2.7.6への更新があったが、特に問題は無く何もせずそのまま動作している。

まだまだ老兵でも何とかできるレベルは保っているようだ。

コメント