webサイト上にシステムを構築していく上で、何らかの不具合や、エラーは避けて通れない。システムが複雑、大規模になるにつれてトラブルの遭遇する頻度や、内容の難易度も増す。トラブルが発生した際に、迅速かつ的確にそれを処理できるかどうかでサイトの信頼度や安定性が決まってくる、ひいては管理者の本当の意味での技量が試される場面であるといえる。
ここでは管理者であるUtanoが遭遇した問題とその解決法について述べていく。閲覧者が同様のトラブルに見舞われた時に一助になれば幸いである。
PHPのロジック的エラーやデータベースのエラーなどの"致命的"なものに関しては言及していない。それらは開発の段階で排除、または対処しておくべきもので、運用の段階で起きた場合、サイトの構築自体が"不可能な状態"になるからだ。ここで述べるのはあくまでも Drupal システム上で復旧可能なトラブルである。
Drupal インストール時にパーミッションが正しく設定されていないとこのメッセージを見ることになる。
settings.php は、日本語ディストリビューションの場合あらかじめファイルが同梱されているのでパーミッションを606または666に設定すればよい。公式ディストリビューションにはsettings.phpが含まれて居ないので新規に作成する必要がある。新しくテキストファイルを作成し以下のようにPHP開始タグと改行のみを記述する。(改行を忘れるとPHPがエラーを返す)
<?phpこれを settings.php にリネームした上でアップロードし、パーミッションを606または666に設定する。
PHPがセーフモードで動作している場合にファイルやディレクトリーのオーナーがFTPユーザーと異なってしまい、パーミッションの問題が発生してしまうことがある(XREAやCORESERVERなど、ちなみに当サイトはCORESERVERを利用している)。セーフモードの問題に関しては利用しているサーバーのマニュアルに従ってほしい。
XREAやCORESERVERの場合、PHPをcgiとして動作させることでセーフモードの回避をおこなうようにサーバー側から手順が示されている。cgiとして動作させたいPHP(ここではindex.phpとinstall.php)と同じディレクトリに.htaccess ファイルを置き、その中で以下のように指定する。
<Files index.php>
AddHandler application/x-httpd-phpcgi .php
</Files>Drupal のルートディレクトリーにはあらかじめ.htaccess が用意されているので、それに追記すれば良い
ディレクトリーに関しては /sites/default/ ディレクトリーの以下に files フォルダが存在していなければならないのでFTPなどであらかじめ作成しておく(install.phpが自動作成してくれるのだが、上記のセーフモード問題とあいまって手動で作成しておく方が無難である)、日本語ディストリビューションの場合は始めからフォルダーが作成されているのでアップロード後にパーミッションを変更するだけで良い。パーミッションは707または777。
これはエラーというよりはシステムからのアドバイスである。インストール時に必要な情報を書き込み終えた setting.php はそれ以降変更はないので、セキュリティの観点からパーミッションの書き込み属性をはずしておきなさいということである。
cron に関するメッセージは管理セクションでお目にかかる。これはエラーとまではいかないが、cron の設定をおこなってもときたま表示されてしまう。cron の設定自体がちょっとした知識を要するので覚書程度に解説を加えておく。
cron はDrupalで定期的にスクリプトを自動実行するための仕組みを指す。UNIX系のOSではデーモンプロセス(バックグラウンドで処理されるプログラム)であるcrondのによって実行される。webサイトではデータベースのバックアップやインデックス付けなど比較的重たい処理を訪問者の少ない時間に実行させるといった用途に使われる。Drupalではデーターベースの処理に加えpingの(設定してあれば)送信、コアやモジュール、テーマなどの更新のチェックも行う。具体的には Drupalに用意されている cron.php を実行すれば良いので、適当なシェルスクリプトを書いてサーバー側で実行するように登録する。シェルスクリプトの自動実行(crond)については自身のサーバー環境で方法を調べてほしい。
当サイトで使用している.sh は以下のような内容になっている(改行はLF"Unix形式"で保存すること)
#!/bin/sh
/usr/local/bin/php /Drupalを設置したディレクトリ(サーバー側から見た実体ディレクトリ)/cron.php
exitこれをサイト内の適当なディレクトリに置き、サーバーのcronジョブに登録する。
cronが使えないサーバーの場合は手動でcronを実行(http://自身のサイトアドレス/admin/reports/status/run-cron にアクセスすれば自動で実行される)するか、cron タスクの設定 【 Cron-job.org の利用】または「cron (crontab) が使えない場合の裏技」(Drupal Japan より)の記事を参考にするといいだろう。
さらに詳しい情報は公式サイトのconfiguring cron jobs(英文)を参照のこと。
現状報告のチェックメッセージはシステムに何らかの問題点が存在する場合に報告される。どういった内容の問題が発生しているのかは管理セクション>リポート>現状報告(Administer>Reports>Status report)を開くことで確認できる。