2010/2/23 火曜日

WP Super Cache 0.99

Filed under: WP Super Cache — Charlie @ 23:20:11

WordPress のアップグレードついでに、 WP Super Cache プラグインのアップグレードもしてみた。

WP Super Cache 0.99 アップグレード

面倒なので SSH で作業しています。

1. 最新版の解凍

http://wordpress.org/extend/plugins/wp-super-cache/installation/

のページから Wp Super Cache の 0.99 を拾ってくる。

# cd wordpress/wp-content/plugins
# mkdir tmp/
# cd tmp/

# wget http://downloads.wordpress.org/plugin/\
wp-super-cache.0.9.9.zip

# unzip wp-super-cache.0.9.9.zip
# chown -R www:www wp-super-cache/

以下のディレクトリ構成で考えます。

wordpress/
 └ wp-content/
     └ plugins/
        ├ wp-super-cache/ ( 現在動いている WP Super Cache )
        └ tmp/
           └ wp-super-cache/ ( 解凍した最新版 )
2. 設定ファイル ( アップグレードの場合は変更済みのはずなので、不要 )
# cd /public_html/wordpress/
# vi wp-config.php

以下の 2 行を追加するが、追加する位置に注意。

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

if ( !defined('ABSPATH') )  ※ この行より上に記述
3. Wp Super Cache プラグインの無効化

管理画面から「停止する」。

4. 古いバージョンとディレクトリを交換
# cd wordpress/wp-content/plugins/
# mv wp-super-cache/ wp-super-cache.bak/
# mv wp-super-cache.bak/ tmp/
# mv tmp/wp-super-cache/ ./
5. Wp Super Cache プラグインの有効化

管理画面から「使用する」。

6. Wp Super Cache の設定 1

プラグイン設定画面に入って設定。

細かいことは忘れてしまったが、「 wp-content を 777 にしてくれ」的なエラーが出たので、その通りにしてみた。

# cd wordpress/
# chmod 777 wp-content/

このあと、プラグイン設定画面を再読み込みさせたらエラーが消えたので、多分どっかのディレクトリに何らかのファイルを作成したのだろう。 .htaccess あたりかな?

wp-content ディレクトリのパーミッションを元に戻しておく。

# chmod 755 wp-content/

設定内容だが、ほとんどデフォルトで設定した。

  • オン WP Cache と Super Cache を使用する
  • キャッシュリビルド。新しいファイルの生成中に supercache ファイルを匿名ユーザーに提供します。とてもたくさんアクセスとたくさんのコメントがつくサイトにおすすめします。"ダイレクトキャッシュページ"と "ロックダウンモード" はサポートされなくなります。
  • Mobile device support using WordPress Mobile Edition. ( これにチェック入れただけ )

「ステータスを更新」ボタンをクリック。

次のような警告が出た。

----------
Rewrite rules must be updated
The rewrite rules required by this plugin have changed or are missing. モバイルサポートには .htaccess ファイルにルールを追加する必要があります。もしくはプラグインをハーフオンモードに設定します。次のオプションがあります (難しい順):

  1. ハーフオンモードに設定し、モバイルサポートを使用します。
  2. /public_html/wordpress/.htaccess 内の # BEGIN WPSuperCache と # END WPSuperCache で囲まれたこのプラグインの mod_rewrite ルールを削除して、ページを再読込みしてプラグインに再生成させてください。
  3. RewriteCond %{HTTP_user_agent} 以下略

----------

このエラーがでるのは、古いバージョンからアップグレードするときだけで、新規に WP Super Cache を入れたときには出ないはず。

対処方法は、 1 番目が簡単そうだったが、 2 番目のやり方をやってみた。

# cd wordpress/
# vi .htaccess
# BEGIN WPSuperCache ← この行から

ほげほげ ( なんて書いてあったか忘れた。古い記事を見れば… )

# END WPSuperCache ← この行までを削除

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /bloody-mary/wordpress/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /bloody-mary/wordpress/index.php [L]
</IfModule>

# END WordPress

簡単な方法としては、# END WPSuperCache の行までカーソルを持っていき、

d1G

と続けてキーボードから入力することで、「その行から 1 番目の行まで」削除される。

あとは

:wq

と入力して保存する。

ブラウザに戻って再読み込みしてみると、警告は消えた。

7. Wp Super Cache の設定 2

次に、 Mod Rewrite ルールの警告を何とかする。

前の手順での再読み込み後に、 Mod Rewrite ルールのところを見ると、以下の警告が表示されている。

CODE:
  1. 静的 html ファイルを利用できるようにするには、お使いのサーバーで /public_html/wordpress/.htaccess と呼ばれるファイルに正しい mod_rewrite ルールが追加されている必要があります。 このファイルをご自分で編集して次のルールを追加する必要があります。かならず WordPress の既存のルールの前に入れてください。
  2.  
  3. # BEGIN WPSuperCache
  4. <IfModule mod_rewrite.c>
  5. RewriteEngine On
  6. RewriteBase /bloody-mary/wordpress/
  7. AddDefaultCharset UTF-8
  8. RewriteCond %{REQUEST_METHOD} !POST
  9. RewriteCond %{QUERY_STRING} !.*=.*
  10. RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress|wp-postpass_).*$
  11. RewriteCond %{HTTP_USER_AGENT} !^.*(2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800).*
  12. RewriteCond %{HTTP:Accept-Encoding} gzip
  13. RewriteCond %{DOCUMENT_ROOT}/public_html/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/bloody-mary/wordpress/$1/index.html.gz -f
  14. RewriteRule ^(.*) /public_html/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/bloody-mary/wordpress/$1/index.html.gz [L]
  15.  
  16. RewriteCond %{REQUEST_METHOD} !POST
  17. RewriteCond %{QUERY_STRING} !.*=.*
  18. RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress|wp-postpass_).*$
  19. RewriteCond %{HTTP_USER_AGENT} !^.*(2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800).*
  20. RewriteCond %{DOCUMENT_ROOT}/public_html/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/bloody-mary/wordpress/$1/index.html -f
  21. RewriteRule ^(.*) /public_html/wordpress/wp-content/cache/supercache/%{HTTP_HOST}/bloody-mary/wordpress/$1/index.html [L]
  22. </IfModule>
  23. # END WPSuperCache
  24. ルールは /public_html/wordpress/wp-content/cache/.htaccess にも追加する必要があります:
  25.  
  26. # BEGIN supercache
  27. <IfModule mod_mime.c>
  28.   <FilesMatch "\.html\.gz$">
  29.     ForceType text/html
  30.     FileETag None
  31.   </FilesMatch>
  32.   AddEncoding gzip .gz
  33.   AddType text/html .gz
  34. </IfModule>
  35. <IfModule mod_deflate.c>
  36.   SetEnvIfNoCase Request_URI \.gz$ no-gzip
  37. </IfModule>
  38. <IfModule mod_headers.c>
  39.   Header set Vary "Accept-Encoding, Cookie"
  40.   Header set Cache-Control 'max-age=300, must-revalidate'
  41. </IfModule>
  42. <IfModule mod_expires.c>
  43.   ExpiresActive On
  44.   ExpiresByType text/html A300
  45. </IfModule>
  46. # END supercache

Apache から .htaccess の書き込み権限があれば、書き込みボタンを押すだけで OK。
書き込み権限がなければ、上記内容を自分で追加する。

こんなカンジで終了。のはず。

2009/7/30 木曜日

WP Super Cache に大はまり

Filed under: WP Super Cache — Charlie @ 20:49:43

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 バイトのファイルが作られ、「移動しないなら元ディレクトリのやつがないのはおかしいかな」と再インストールしてみたらビンゴ。

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

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

Total Hits: 71281 / Total Unique URL: 27708 / Hits today: 27
Login