squeezeプラグイン
squeeze.rb
機能
tDiaryのデータベースから日別にHTMLファイルを生成し、任意のディレクトリに保存します。 検索エンジン(主にNamazu)での使用を想定しています。
- 日記本文からツッコミまでを再現
- 非表示の日記を対象にするかどうかを選択できる
- 年別にディレクトリを作成(1ディレクトリ最大365ファイル)、または全てのファイルをを一つのディレクトリに作成(tDiary互換モード)
- CGIとしてもコマンドとしてもtDiaryプラグインとしても動作する
注意
tDiary-1.4.xまではyasqueeze.rbという名称でしたが、tDiary-1.5.xからはsqueeze.rbに名称変更されました。1.4.xをお使いの方はsquueze.rbの記述を適宜yasqueeze.rbと読み替えてください。
使い方
squeeze.rbは3つの使い方ができます。
プラグインとして使用(1日の日記をHTML化する)
tDiaryは標準でも更新時にHTMLファイルを任意のディレクトリに格納することができますが、ツッコミなどが保存されない、HTML形式ではない、など不完全です。 用途によってはそれで充分ですが、squeeze.rbプラグインを使えば完全なHTMLを生成できます。また、ディレクトリを年別に保存しますので、若干ファイルの視認性が上がります。ただし、tDiaryと同様に1つのディレクトリに全てのファイルを置くことも可能です(オプション指定を参照してください)。
- pluginディレクトリにsqueeze.rbを置きます。
- tdiary.confの@text_outputの部分を以下のように変更します(1.4.xのみ)。
@text_output = false @text_output_path = ''
これだけで、日記を登録・更新・ツッコミを登録するたびにHTMLファイルが生成されるようになります。なお、非表示にした日記は出力されません(かつ、すでに出力済みの場合は削除されます)。
全ての日記を日別にHTML化する
1からtDiaryを使う人はプラグインとしてsqueeze.rbを使うだけでこちらは特に必要ないのですが、すでにtDiaryを運用している場合、一度に過去の日記をHTML化したい場合があります。 そのような場合は以下の2つの方法でHTMLを生成できます。
CGIとして使用
- tDiaryがあるサーバと同じサーバのtdiaryディレクトリ直下(index.rbやupdate.rb、tdiary.confがあるディレクトリ)にsqueeze.rbを置き、index.rb,update.rbと同じアクセス権限にします。WWWサーバがCGIとして実行できるようにすることを忘れないでください。
- .htaccessに以下を追加します。これは必須ではありませんがセキュリティ上、推奨します。
<Files squeeze.rb>
AuthName tDiary
AuthType Basic
AuthUserFile /home/hoge/tdiary/.htpasswd
Require user hoge
</Files>
- WWWブラウザからhttp://hogehoge/tdiary/squeeze.rbにアクセスします。
コマンドとして使用
tDiaryがあるサーバと同じサーバで実行する必要があります。tdiary.confで指定した@data_pathへの書込権限が必要です。結構手間がかかりますのであまりおすすめできません。
- 出力先のディレクトリを作成します。このディレクトリはカレントユーザが書込権限を持っている必要がありますので必要に応じてchmodしてください。
- squeeze.rbを実行します。
$ruby squeeze.rb [-p <tDiary path>] [-c <tdiary.conf path>] [-a] [-s] [-x suffix] <destpath>
- -p <tDiary path>
- tDiaryのインストールパス。未指定時はカレントディレクトリ(例: -p /homge/hoge/tdiary)。
- -c <tdiary.conf path>
- tdiary.confが存在するパス。未指定時はカレントディレクトリ(例: -c /home/hoge/public_html/diary)。
- -a
- 非表示の日記も対象とする。未指定時は非表示の日記は出力せず、かつ、すでに出力済みのファイルが存在した場合は削除する。
- -s
- 旧squeeze.rbモード。tDiary-1.4.x標準と同じ出力先のディレクトリ構成にする。
- -x
- suffix指定。生成するHTMLファイルのsuffix(拡張子)を指定する。例えば「-x .html」とすると0122.htmlのようなファイル名になる。無指定時には何もつかない。
- <dest path>
- HTMLファイルの生成先ディレクトリ。
オプション指定
tdiary.confにオプションを指定することで、squeeze.rbの振る舞いを変更できます。
ファイルの出力先を変更する
squeeze.rbは標準で、ファイルを(@data_path)/cache/html/配下に生成します。これを変更する場合は以下のようにします。
- 生成先のディレクトリを作成します。ここでは、/home/hoge/tdiary/html/とします。
- WWWサーバがRead/Write権を持っている必要がありますのでWWWサーバがアクセスできるようにchmodします。
- 次にtdiary.confに以下のオプションを追加します。
@options['squeeze.output_path'] = '/home/hoge/tdiary/html/'
非表示の日記を対象にする
通常、非表示の日記は出力されません。検索エンジンで使用することを想定した場合、ここをtrueにしてしまうと隠しているつもりの日記も検索対象になってしまうためです。
しかし、squeeze.rbをHTML化したバックアップファイルとしたい場合は非表示の日記も出力させたい場合があります。 この場合は、tdiary.confに以下のオプションを追加します。
@options['squeeze.all_data'] = false
出力先のディレクトリ構成をtDiary-1.4.x標準と同じにする
デフォルトでは、出力先のディレクトリは、年別になります(例:..../2000/, ..../2001/, ...)。これをtDiary-1.4.x標準と同じディレクトリ構成(1つのディレクトリに全てのファイルを出力する)にすることができます。
この場合は、tdiary.confに以下のオプションを追加します。
@options['squeeze.compat_path'] = true
出力するHTMLファイルのsuffix(拡張子)を指定する
無指定時には年月日からなる数字だけのファイル名になりますが、検索エンジンのインデックス化のために*.htmlにしたい時などにこれを指定することで任意のsuffixを指定できます。例えば*.htmlにするには以下のように指定します。
@options['squeeze.suffix'] = '.html'
Namazuで使用する
squeeze.rbは主にNamazu等の検索エンジンで使用することを目的としています。ここでは、典型的なNamazuの設定方法を示します。
前提として、以下のようなディレクトリ・ファイル構成になっているものとします。
- /home/hoge/namazu - Namazuのインデックスファイルのあるディレクトリ
- /home/hoge/tdiary/cache/html/ - squeeze.rbの出力先
- /home/hoge/public_html/tdiary/ - tdiaryのあるディレクトリ
- /home/hoge/public_html/namazu/ - namazu.cgi, .namazurcのあるディレクトリ
- http://www.hoge.com/hoge/tdiary/ - tdiaryのURL(/home/hoge/public_html/tdiary/にマッピング)
- http://www.hoge.com/hoge/namazu/ - namazu.cgiのURL(/home/hoge/public_html/namazu/にマッピング)
オリジナルモード(@options['squeeze.compat_path'] = false)の場合
以下のようにファイルが生成されます。
/home/hoge/tdiary/cache/html/2000/0101( ... 1231) /home/hoge/tdiary/cache/html/2001/0101( ... 1231) /home/hoge/tdiary/cache/html/2002/0101( ... 1231)
.namazurcの内容を以下のようにします。
Index /home/hoge/namazu/ Replace /home/hoge/tdiary/cache/html/(\d\d\d\d)/ http://www.hoge.com/hoge/tdiary/?date=\1 Lang ja
tDiary互換モード(@options['squeeze.compat_path'] = true)の場合
以下のようにファイルが生成されます。
/home/hoge/tdiary/cache/html/20000101( ... 20001231) /home/hoge/tdiary/cache/html/20010101( ... 20011231) /home/hoge/tdiary/cache/html/20020101( ... 20021231)
.namazurcの内容を以下のようにします。
Index /home/hoge/namazu/ Replace /home/hoge/tdiary/cache/html/ http://www.hoge.com/hoge/tdiary/?date= Lang ja
Namazuのインデックスを生成
ファイルが生成できれば、あとはそれを元にNamazuのインデックスファイルを生成します。
$mknmz /home/hoge/tdiary/cache/html --output-dir=/home/hoge/namazu
動作確認
これでhttp://www.hoge.com/namazu/namazu.cgiでNamazuから検索できると思います。できなかったらご一報を(^^;)。
tDiaryから検索できるようにする
tDiaryに検索用のフォームを表示させることもできます。tDiaryの設定画面から、お気に入りの場所に以下のテキストを挿入します。
<div class="search"> <form class="search" method="get" action="/namazu/namazu.cgi"> <input class="search" type="text" name="query" size=20 value=""> <input class="search" type="submit" value="Search"> </form> </div>
上記例では、classを分けてあるので、CSSを使えばデザインをいろいろと変更できます。 search_form.rbを使うと、以下のように書くことができます。
<div class="search"> <%= namazu_form "/namazu/namazu.cgi" %> </div>
こっちの方が簡単ですね。
傾向と対策
共通
エラーメッセージ Errno::EACCES が出る
出力先ディレクトリにWWWサーバのアクセス権が無い場合に発生します。出力先ディレクトリ(及びその配下全てのディレクトリ)に対し、WWWサーバ(通常はothers)の実行権を、出力先ディレクトリ(及びその配下全てのディレクトリ)にあるファイルに対しWWWサーバの書込権を与えます。
エラーメッセージ Errno::ENOENT が出る
出力先ディレクトリの親ディレクトリが存在しない場合に発生します。きちんと@options['squeeze.output_path']で指定したディレクトリが存在するか(あるいは指定自体に誤りがないか)確認してください。ディレクトリが無い場合は、出力先ディレクトリを作成し、WWWサーバの実行権を与えます。
CGIとしてWWWからアクセスした場合
CGIとしてWWWブラウザから呼び出した際にエラーが出る
squeeze.rbのパーミッションを再度確認してください。必ず、WWWサーバの実行権が必要です。また、.htaccessを使用している場合は、それが間違えていないか確認します。
undefined method `+' for nil (NameError)というエラーが出る
squeeze.rbのバグと思われます。このバグがフィクスされたRevision: 1.11以降を使ってください。
なお、このバグ自体は、@options['squeeze.output_path']をtdiary.confに正しく設定すると回避できます。
参考: <URL:http://ogawa.s18.xrea.com/tdiary/20030123.html#p02>
ChangeLog
2003-12-24: @options['squeeze.compat_path']の記述が逆になっていたのを修正(Reported by NTさん)
2003-05-14: tDiary-usersより移動
キーワード:
参照:[XREA + tDiary + Namazu] [tDiary関係]