デザインとテーマ
広告を出すためにApacheをいじっているらしく、一部、HTTPやApacheの実装などに反する環境変数を設定します。PATH_INFOを2回繰り返して設定するのが最大(最低)のバグです。adiaryをここで動かすためには、設定ファイル adiary.conf.cgi の最初の方に次の2行を書き加える必要があります。
<$ENV.PATH_INFO = substr(ENV.PATH_INFO, length(ENV.PATH_INFO)/2)> <$ENV.SCRIPT_NAME = substr(ENV.SCRIPT_NAME, 0, length(ENV.SCRIPT_NAME) - length(ENV.PATH_INFO))>
※XREA有料版ではこのような細工は不要です。
通常通り設置しただけではテーマなどCSSが読み出せない問題があります。詳細はこちら。
パスの自動解析に失敗するようです。自分で試した限り問題なさそうでしたが。
うまくいかない場合はこちらを参考に <$Basepath>, <$Mod_rewrite=0>を設定してみてください。
SCRIPT_FILENAME に PATH_INFO が付加して出力されるバグがあるようです。
http://adiary.xx.land.to/blog/adiary.cgi に設置した場合
<$Mod_rewrite=0>
<$Basepath="/blog/">
<$ENV.SCRIPT_NAME="/blog/adiary.cgi">
ロリポップで、ImageMagickのロードに失敗するようです。uploader.conf に次の設定をしてください。
[executor] Can't locate auto/Image/Magick/Thumbnail.al in @INC (@INC ... 以下略 のようなエラーが出る場合,次の設定を有効にしてみてください. <$v.use_resize = 1>
Apacheを使用しているのにうまく動作しない場合、cgi-wrapper を使用している可能性があります。Apacheのコンフィグにて、
AddHandler cgi-wrapper .cgi AddHandler cgi-wrapper .pl
と指定されているようでしたら、これらをコメントアウトし、cgi-script に書き換えてみてください。
AddHandler cgi-script .cgi
cgi-wrapper環境ではPATH_INFOが狂う問題があるようです。(浅野さんの情報提供)*1
デフォルトでは動かないレンタルサーバがありましたらお知らせ&問題解決にご協力ください。
adiary では mod_rewrite を利用して設置することを推奨しています。例えば、
CGI設置場所 : http://xx.yy.zz/~user/adiary/adiary.cgi 見せたいURL : http://xx.yy.zz/~user/adiary/
であるとき、.htaccess を http://xx.yy.zz/~user/adiary/ に設置して
RewriteEngine On RewriteBase /~user/adiary/ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ adiary.cgi/$1 [L]
とすることで、実現出来ます。最近の記事などはキャッシュされていますので、リンクを書き換えるため、日記帳の設定を開いて特に変更せず保存してください。
さてではCGI設置場所を変更しないで http://xx.yy.zz/~user/ で見せるにはどうしたら良いでしょうか?
CGI設置場所 : http://xx.yy.zz/~user/adiary/adiary.cgi 見せたいURL : http://xx.yy.zz/~user/
.htaccess を http://xx.yy.zz/~user/ に設置して
RewriteEngine On RewriteBase /~user/ RewriteRule ^adiary/ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ adiary/$1 RewriteRule ^adiary/[\w\.]*\.cgi - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^adiary/(.*)$ adiary/adiary.cgi/$1 [L]
と書きます。http://xx.yy.zz/~user/adiary/ にある .htaccess(のmod_rewrite設定)は無効化します。
このとき<$Basepath>は設定しないか、設定するならば<$Basepath="/user/">とします。
Apache1.3では上の方法はうまくいかないようです。それぞれ次のように設定すれば大丈夫でした。
/~user/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^adiary/ - [L]
RewriteRule ^(.*)$ adiary/$1
/~user/adiary/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ adiary.cgi/$1
adiary.conf.cgi にあるディレクトリ設定
# 公開のデータディレクトリ <$constant(public_dir) = 'public/'> <$constant(theme_dir) = 'theme/'>
を変更する際、adiary.cgi から見たデータの保管場所として指定する必要があります。というのも www 上から見せる URL のパスであるのと同時に、adiary が実体ファイルにアクセスする際のパスにもなっているためです。
adiaryからメールを送信するために使用します。どの MTA(メール送信デーモン)でも付属していると思います。通常パスは自動で発見するので大丈夫です*1。レンタルサーバでは利用出来ることが多いようです。*2
adiaryからインストールされているサーバにおいて、sendmailコマンド((sendmail互換送信コマンド。メール送信デーモンはsendmailに限らずなんでも構いません))がインストールされ、外部に向けてメールが送信できる状態である必要があります。
adiaryへの投稿に使用する(投稿を受け取るために使用する)専用のメールアドレスが必要です。普段使用しているメールアドレスと共用することはできません(次々とメールが消えていきます。危険です)。
メールは、pop(apop含む)で処理する方法と、Webサーバと同じサーバで動くメールサーバを利用するか fetchmail+procmail を使いメールから直接起動する方法の2種類に分かれます。
Perl 5.6系の場合、標準ではNet::POP3モジュールがないとのことですので別途インストールしてください。ActivePerlの場合は5.6系でも入っているそうです(未確認)。
Perl 5.8系では特別な設定は不要です。
mail-post@blog.adiary.xx というメールアドレスを利用すると仮定して説明します。まず adiary.conf.cgi を設定します。
<$v.mail_post_address = "mail-post@blog.adiary.xx"> # メールのチェック間隔(秒) <$v.pop_timer=5*60> 5分間隔 # popログ 兼 チェック間隔記録用ファイル <$v.pop_log_file="<@data_dir>pop_log.txt">
pop_timer には pop をチェックする感覚を秒数で指定します。難しいことは省略しますが、前にチェックしたときからこの時間だけ過ぎたあと最初にアクセスがあったときに pop による投稿処理が行われます。実際に表示画面に反映されるのは、さらにその次のアクセス以降になります。
crontab が利用できる環境でしたら、このタイマーを使わず crontab で mail.cgi を直接起動してください。
続いて mail.conf.cgi も設定します。細かいことは設定ファイルを読んでください。
<#$Server_name = 'blog.adiary.xx'> <$Basepath='/adiary/'> <$mail.pop_mode = 'pop'> 'apop' も指定可能 <$mail.pop_log_file = v.pop_log_file> <$mail.pop_host='blog.adiary.xx'> <$mail.pop_user='mail-post'> <$mail.pop_pass='password'>
特にBasepthは正しく設定してください。adiary.cgiによってBathpathは次のようになります。
URL | Basepath |
---|---|
http://www.~.xx/cgi/blog/adiary.cgi | /cgi/blog/ |
http://www.~.xx/blog/adiary.cgi | /blog/ |
http://www.~.xx/adiary.cgi | / |
ログファイルにエラーが記録されている場合、pop に失敗している可能性があります。その場合は直接 mail.cgi をブラウザから開いてみてください。エラーメッセージが表示されるはずです。
大抵メールサーバには、特定のメールが来た際に、コマンドを直接呼び出す機能があります。sendmail ならば、aliases に例えば次のように書きます。
blog-post: "| /home/www/adiary/mail.cgi"
他のメールデーモン(やfetchmail等)での設定方法は各自調べてみてください*4。mail.cgi に対してパイプでヘッダを含めた完全なメールデータを渡してください。
adiary.conf.cgi は次のようになります。
<$v.mail_post_address = "mail-post@blog.adiary.xx"> # popログ 兼 チェック間隔記録用ファイル <$v.pop_log_file="<@data_dir>pop_log.txt">
pop_timerは設定しないでください。mail.conf.cgi では前半をきちんと設定してください。webサーバから起動されるわけではないため、手動で設定する必要があります。ここの設定を間違えると、メール投稿時は変なRSSが生成される、といった不具合が起きます。
<#$mail.pop_mode = 'pop'> この行は設定してはいけない
最後に mail.cgi の設定ですがVersion1.22以降の方はこの設定は不要です。8行目付近にコメントアウトされているカレントディレクトリ設定を適切に記述してください。
chdir("/home/www/adiary");
サーバ上ディレクトリ(Web上のディレクトリではありません)の絶対パスを指定してください。
これで一通り機能するはずです。