WordPressの自動インストール・アップグレードについてのトラブルはたくさんあります。
原因やその対処法もいろいろありすぎて、自分の環境に合う方法を見つけるのは一苦労です。
PHPセーフモードの問題、ディレクトリのパーミッションの問題などありますが、私の環境(自宅サーバのBlueOnyx)では、apacheの実行ユーザの問題でした。
apacheの実行ユーザを一時的にFTPユーザ名と同じすると、あっさり問題解決します。しかし、仮想サイトを複数作成していますから、実行ユーザを特定のサイトのFTPユーザにしておくわけにもいかず。毎回毎回apacheの実行ユーザを変え、元に戻す、というならば、自動でのアップグレードをあきらめて素直にFTPでファイルをアップロードすれば良いということなるわけで…。
もっとも参考になったのは、以下のページ。Wordpressがファイルを自動でコピーや移動する際のしくみがちょっとわかりました。
FTPの接続情報を設定せずにWordPressを自動更新させる方法 @AKIBE
しくみがわかると、対処方法もいろいろ思いつくものです。
WordPressがファイルの実行権限の有無をチェックする際に、ディレクトリの所有者(Wordpressのユーザー)とファイルの所有者(apache)が合わないことで、ファイルの移動ができなかったようです。でも、ここで疑問なのは、なぜ私のサーバー環境では、自動生成する際にディレクトリはFTPユーザ名で作成され、ファイルはapacheの実行ユーザ名で作成されようとするのか。これは、私のサーバー環境の問題のようです。だって、ローカルのXAMPPで構築したWordpressや、レンタルサーバー上に構築したWordpressでは何の問題もなく自動アップグレードできますから。
この問題については、あとでじっくり考えます。
で、ディレクトリの所有者をapache実行ユーザにするためにはどうしたらいいか、考えました。
で、上記の参考ページにもあるように、wp-config.phpに以下を追加しました。ここがキモでした。
//ファイルのオーナーチェックをしない define('FS_METHOD','direct');
これを追加しないと、インストールやアップグレード時にFTP接続情報が聞かれ、そのFTPユーザ名でディレクトリは作られて(でもファイルはapache実行ユーザ名で作られて)しまうと。
でもこの魔法の1行で、面倒なFTP接続情報の確認ページも現れず、さらにディレクトリもapache実行ユーザが所有者で作成されます。
一石二鳥!!
そして、upgradeディレクトリとuploadsディレクトリのユーザーをapache実行ユーザ名:グループ(私の場合だとapache:apache)に変更しておくことも忘れずに…。
# chown apache:apache upgrade # chown apache:apache uploads
これでOK!!無事に動きました!!
か、感動…。
実はこれずーっと前から悩んでいたけど「テスト用の自宅サーバーだからいいや」と、ずーっと放置していた案件でした。
でも、なぜうちのサーバーだけ、こんな挙動なんでしょうねえ…。そのあたりは、もっとサーバーに詳しくならないと、ダメですね…。