2009年7月30日(木) 20:49:43 @ Charlie

WP Super Cache に大はまり

Category : WP Super Cache / Tags :

WP Super Cache 0.9.6.1 ではまりました

WordPress のプラグインに WP Super Cache というものがある。このプラグインは動的なコンテンツである WordPress の記事をキャッシュし、あたかも静的なページであるかのように振舞う。 WP Super Cache は記事にアクセスがあると、特定のディレクトリにキャッシュファイルを作る。次回からはこのキャッシュを使って高速にページを表示するというわけだ。

このサイトもいつの間にかアクセス数が増えていたので、入れても損はないだろうと、早速インストールしてみることにした。

しかし、これほどハメられることになるとは、予想しなかった。「これほどってどれくらいよ?」という質問には、「丸 1 日は堅い」とお答えしよう。何故それほど時間がかかったかというと、 readme.txt を良く読まずに不精してしまったためである。まあ readme もさほど詳しく書かれているわけではないが…

超意訳 readme.txt

== Installation ==

1. Apache の mod mime と mod rewrite modules を有効にしましょう。
2. もう WP-Cache がインストール済みなら削除しましょう。

wp-config.php の WP_CACHE define も消しましょうか( 訳に自信なし )。
wp-content/wp-cache-config.php と wp-content/advanced-cache.php も消して、プラグインを無効にしましょう。

3. plugins/ ディレクトリに、解凍したディレクトリをアップしましょう。

wp-content/plugins/wp-super-cache/
のようなカンジになります。

4. WordPress で MU ( 何のことやら ) を使っているなら、 wp-content/mu-plugins/wp-super-cache/ にインストールする必要がありますよ。

wp-cache.php をコピーして mu-plugins のディレクトリにおきましょう。

5. WordPress のユーザはそのプラグインページで、「WP Super Cache」を有効にする必要があるでしょう。 ( さっぱり分からん )

MU プラグイン関係のことだと思うが。

6. 設定の「WP Super Cache」でキャッシュを有効にしてね。

エラーが表示されたら、一個ずつ解決してちょ。 FAQ とかも見てね。 ( 私の場合はそれ以前の問題だったが )

7. mod_rewrite のルールが .htaccess に書き込まれるから。書かれなければ自分で書いてね。

以下、 .htaccess の内容

8. プラグイン有効にした後 wp-content/cache/.htaccess が作られるから。自分で作らなくてもいいよ。でも作られないときは自分で書いてね。

以下、 .htaccess の内容

9. 「500 internal error」とか出たら、 httpd.conf の設定を変更するといいよ。

<Directory /home/www/>
AllowOverride All
</Directory>

10. wp-content/advanced-cache.php ができてれば OK と思うよ。

WordPress のディレクトリを変更していたりしたら、適当に調整してね。

はまった過程1

まず、 WP Super Cache を使う条件として、パーマリンク設定をしておく必要がある ( はずだ )。今まで「パーマリンク? そういえば初期設定でそんなのあったかな…」程度の認識でしかなかったので、これを変更するのにちょっと手間取った。

WordPress のデフォルトのアクセス URL は以下のようなものになる。

http://www.studio-soleil.com/bloody-mary/wordpress/?p=1126

これだと明らかに動的コンテンツだろうということで、以下のようなリンクに変更した。

http://www.studio-soleil.com/bloody-mary/wordpress/archives/1126.html

しかし、パーマリンク変更後に 404 Not Found のエラーでページが表示されない。

これは、ディレクトリに対して FollowSymLinks ( Apache の設定 ) が有効になっていないためだ。 .htaccess か httpd.conf で有効にする。これは問題ない。

はまった過程2

次にプラグインをインストールすることになったのだが、英語の readme を読むのが面倒で、つい不精して Google で日本語ページを検索してしまった。

この記事を書いている時点での最新バージョンが WP Super Cache 0.9.6.1 (Last Updated: 2009-7-29) である。ちなみに昨日は 0.9.6.0 だったのが、今日になったら 0.9.6.1 にアップデートしていた。
orz

これほどにピカピカのバージョンであるからして、検索して出てくるページは、当然ながら古い方法だ。これらのページには、解凍後に出てくるファイル wp-cache-config.php や advanced-cache.php を編集したり、 wp-content/ ディレクトリに移動したりしなさいと書かれてあるが、この作業は現行バージョンでは不要である。

むしろ、 advanced-cache.php を自分で移動させてしまったがために、一見インストールできているが、実はキャッシュされない等といった不具合に見舞われてしまったのである。

もちろん、このバージョンと同じやり方も載っていたところはあったが、逆に必要な部分 ( wp-config.php に記述しなければならない、とか ) がなくて分からなかった。

この advanced-cache.php が原因であると判明するまでに 1 日もかかってしまったわけだが、なにせ error_log にも原因が出ないのだ。どうにもならない。 error_log で原因が探せないものだから、本家 FAQ を虱潰しである。参ってしまう。

この影牢なみにひどいトラップに引っかかる人が少なくなるように、プラグインが有効になるまでの処理を書き留めておこうと思ったわけ。

WP Super Cache 0.9.6.1 のインストール

1. 前提条件

パーマリンク設定をデフォルト以外にしている必要がある ( たぶん )。
私の場合、「カスタマイズ」で「 /archives/%post_id%.html 」にしてある。

この設定をすることで、 /wordpress/.htaccess は次のようになるはずだ。

HTML:
  1. # BEGIN WordPress
  2. <IfModule mod_rewrite.c>
  3. RewriteEngine On
  4. RewriteBase /bloody-mary/wordpress/  ※ 環境による
  5. RewriteCond %{REQUEST_FILENAME} !-f
  6. RewriteCond %{REQUEST_FILENAME} !-d
  7. RewriteRule . /bloody-mary/wordpress/index.php [L]
  8. </IfModule>
  9. # END WordPress

※ .htaccess の所有者を Apache:Apache にしておくこと。

※ /wp-content も同様に、 Apache:Apache 755 にしておく。この中に cache フォルダと設定ファイルが作られるので。

2. 解凍

wp-super-cache.0.9.6.1.zip を解凍してできたディレクトリ wp-super-cache を wordpress/wp-content/plugins/ にアップ。

たぶん不要だが、一応所有者を Apache のユーザにしておく。

# chown -R Apache:Apache plugins/wp-super-cache/
3. 設定ファイルについて

※ 設定後、 advanced-cache.phpwp-cache-config.phpwp-content/自動作成される。

wp-content/ ディレクトリの所有者/パーミッションを Apache:Apache 755 とかにしておいて、 Apache (PHP) から書き込みできるようにしておく。

# chown Apache:Apache wordpress/wp-content/
# chmod 755 wordpress/wp-content/

wp-config.php の編集を行なう。

# vi wordpress/wp-config.php

    // WP Super Cache Manager
    define('WP_CACHE', true);

 84 if ( !defined('ABSPATH') )  ※ この行より上に記述
4. プラグイン有効化

管理画面にログインしてプラグインを有効化すると、次のメッセージが表示される。

「WP Super Cache is disabled. Please go to the plugin admin page to enable caching.」
admin のリンクをクリックするか、設定メニューの「 WP Super Cache 」をクリック。

「ON WP Cache and Super Cache enabled」にチェック。
「Clear all cache files when a post or page is published. (This may significantly slow down saving of posts.)」にチェック。
「Update Status」のボタンで設定を保存する。

バックグラウンドで、以下のファイル/ディレクトリが自動作成される。

  • wp-content/cache
  • wp-content/wp-cache-config.php
  • wp-content/advanced-cache.php

※ この時点で、 /wp-content/advanced-cache.php と /wp-content/plugins/wp-super-cache/advanced-cache.php の二つのファイルがあるが、これで正解。両者微妙にサイズが異なる。

-rw-r--r--  1 Apache Apache 594 2009-07-30 19:22
    wp-content/advanced-cache.php
-rw-r--r--  1 Apache Apache 456 2009-07-30 02:37
    wp-content/plugins/wp-super-cache/advanced-cache.php

これのに気づくまでどれだけの時間をツイヤシタカ…

気を取り直して、「Update Status」を押した後は、画面が遷移してまた設定画面に戻るが、下にスクロールしていくと「Mod Rewrite Rules」という .htaccess の設定が表示されている。「Update Mod_Rewrite Rules >>」をクリックすると、 .htaccess が以下のように書き換わる。

wordpress/.htaccess
HTML:
  1. # BEGIN WPSuperCache
  2. <IfModule mod_rewrite.c>
  3. RewriteEngine On
  4. RewriteBase /
  5. AddDefaultCharset UTF-8
  6. RewriteCond %{REQUEST_METHOD} !=POST
  7. RewriteCond %{QUERY_STRING} !.*=.*
  8. RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress|wp-postpass_).*$
  9. RewriteCond %{HTTP_user_agent} !^.*(Android|2.0\ MMP|240x320|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|hiptop|IEMobile|iPhone|iPod|KYOCERA/WX310K|LG/U990|MIDP-2.0|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|Playstation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|Windows\ CE|WinWAP).*
  10. RewriteCond %{HTTP:Accept-Encoding} gzip
  11. RewriteCond %{DOCUMENT_ROOT}/絶対パス/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz -f
  12. RewriteRule ^(.*) /絶対パス/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz [L]
  13.  
  14. RewriteCond %{REQUEST_METHOD} !=POST
  15. RewriteCond %{QUERY_STRING} !.*=.*
  16. RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress|wp-postpass_).*$
  17. RewriteCond %{HTTP_user_agent} !^.*(Android|2.0\ MMP|240x320|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|hiptop|IEMobile|iPhone|iPod|KYOCERA/WX310K|LG/U990|MIDP-2.0|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|Playstation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|Windows\ CE|WinWAP).*
  18. RewriteCond %{DOCUMENT_ROOT}/絶対パス/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html -f
  19. RewriteRule ^(.*) /絶対パス/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html [L]
  20. </IfModule>
  21.  
  22. # END WPSuperCache
  23.  
  24. # BEGIN WordPress
  25. <IfModule mod_rewrite.c>
  26. RewriteBase /bloody-mary/wordpress/  ※ 環境による
  27. RewriteCond %{REQUEST_FILENAME} !-f
  28. RewriteCond %{REQUEST_FILENAME} !-d
  29. RewriteRule . /bloody-mary/wordpress/index.php [L]
  30. </IfModule>
  31.  
  32. # END WordPress

wordpress/wp-content/cache/.htaccess
HTML:
  1. # BEGIN supercache
  2. <IfModule mod_mime.c>
  3.   <FilesMatch "\.html\.gz$">
  4.     ForceType text/html
  5.     FileETag None
  6.   </FilesMatch>
  7.   AddEncoding gzip .gz
  8.   AddType text/html .gz
  9. </IfModule>
  10. <IfModule mod_deflate.c>
  11.   SetEnvIfNoCase Request_URI \.gz$ no-gzip
  12. </IfModule>
  13. <IfModule mod_headers.c>
  14.   Header set Cache-Control 'max-age=300, must-revalidate'
  15. </IfModule>
  16. <IfModule mod_expires.c>
  17.   ExpiresActive On
  18.   ExpiresByType text/html A300
  19. </IfModule>
  20.  
  21. # END supercache

※ Ktai Style を使う人は、 Ktai Style プラグインを有効にした後、「Mobile device support. 」にチェックをつけ、「Update Status」をクリックするだけで OK。

WP Super Cache 0.9.6 くらい?で対策されたためか、他のサイトで紹介されているようなややこしい手順は踏まなくても良い。 .htaccess を書き換える必要もない。

5. キャッシュの確認

ページを表示させ、管理画面の [ WP Super Cache ] - [ Cache Contents ] の項目に、以下のように表示されてればキャッシュファイルが作られている。

WP-Cache (97.23KB)
2 Cached Pages
0 Expired Pages

WP-Super-Cache (0KB)
0 Cached Pages
0 Expired Pages

Garbage Collection
Last GC was 00:50 minutes ago
Next GC in 09:10 minutes

WP Super Cache が思うように動作しないので、原因を調べていく過程で、本家サイトの Installation や Faq を英文で見る羽目になった。といっても私は英語が読めるわけではなく、感じるだけである。ふぃーる。

FAQ の項目を上から虱潰しにしていき、それでも見つからず、「 wp-content/advanced-cache.php が自動作成されるなら移動しなくてもいいんじゃね?」ということで削除して再設定したら 0 バイトのファイルが作られ、「移動しないなら元ディレクトリのやつがないのはおかしいかな」と再インストールしてみたらビンゴ。

結局、インストール自体はすごく簡単になったということだね。

急がば回ってみるのも一興か。

2008年11月29日(土) 02:00:59 @ Charlie

CSS で文字が消える不具合

Category : 設定

CSS で文字が消える不具合

WordPress で記事を投稿するときに、最初のタイトルタグの文字が消えてしまう不具合が発生。
下にスクロールして、また上の方に戻ってくるとまず消えている。

実際に起こったケース。
管理画面にログインしたあとに記事を見ると、最初の方に編集のリンクがでてくる。
この「編集」は div.meta で囲まれているのだが、その後に h4 タグとかがあると文字が消えてしまう。
範囲選択してやると元に戻ったりするが、気になったので google パワーを消費。
CSS 、消えるで検索したら一発ヒット。

IE6 で背景色/背景画像を指定している場合に、一部の文字列が消えることがあるらしい。
解決策は width を auto 以外に指定すること。

というわけで、 div.meta の後に使うのは h4 だが、一応それ以下の見出しタグすべてに width を指定してやった。

CSS:
  1. div.storycontent h4 {
  2.     width              : 100%;    /* div.meta の後で文字が消えることがある対策 */
  3.     font-size          : 12px;
  4.     background-color   : #38b48b;
  5.     color              : #ffffff;
  6.     margin             : 20px 0px 0.5em 0px;
  7.     padding            : 1px 2px 1px 10px;
  8. }
  9.  
  10. div.storycontent h5 {
  11.     width              : 100%;    /* div.meta の後で文字が消えることがある対策 */
  12.     font-size          : 12px;
  13.     border-left        : 5px solid #38b48b;
  14.     margin             : 20px 0px 0.5em 0px;
  15.     padding            : 1px 2px 1px 10px;
  16. }
  17.  
  18. div.storycontent h6 {
  19.     width              : 100%;    /* div.meta の後で文字が消えることがある対策 */
  20.     font-size          : 12px;
  21.     border-bottom      : 1px solid #38b48b;
  22.     margin             : 20px 0px 0.5em 0px;
  23.     padding            : 0px 2px 0px 10px;
  24. }

これで OK 。

記事「CSS の li に width を指定すると不具合が起こる」とは逆に、 width を指定しないと不具合が起こるというのだからどっちやねん。

2008年11月28日(金) 22:00:33 @ Charlie

Counterize II のバージョンアップ作業

Category : Counterize2

Counterize II のバージョンアップ

2.12.7 から 2.14.1 へアップグレードしたので、今後のための覚書。

※ 記事「WordPress にカウンターを設置する」で改造している人は、これをやらないと動かない。

1. プラグインのダウンロード&解凍

CODE:
  1. # cd wordpress/wp-content/plugins/
  2. ・ テンポラリディレクトリの中で作業する
  3. # mkdir tmp
  4. # cd tmp
  5. # wget http://downloads.wordpress.org/plugin/counterizeii.zip
  6. # unzip counterizeii.zip

2. 改造コードの追加

CODE:
  1. # vi counterizeii/counterize.php

以下の改造コードを追加

PHP:
  1. if(function_exists('load_plugin_textdomain'))
  2.   load_plugin_textdomain('counterize','wp-content/plugins/counterizeii');
  3.  
  4. include("browsniff.php");
  5.  
  6. # この辺に追加
  7. # Bloody-Mary
  8. function counterize_getPageHits($uri) {
  9.   $a = parse_url($uri);
  10.   parse_str($a['query']); # Check
  11.   if(ereg("[0-9]+$", $p)) {
  12.     $num_p = $p;
  13.     $sql = "SELECT count FROM wp_Counterize_Pages WHERE url = '" . $uri . "'";
  14.     $wpdb =& $GLOBALS['wpdb'];
  15.     $result = $wpdb->get_var($sql) . " Access";
  16.   } else {
  17.       $result = "";
  18.   }
  19.   return $result;
  20. }

3. 旧バージョンの無効化&新バージョン有効化

以上で OK 。

Counter : Access
ログイン