2009-11-29

Reflecto & plone.app.blob を入れましたが…。

Plone2.1.3の時は、サイズの大きいPDFや画像、バイナリドキュメントは、Data.fsには保存しませんでした。代わりに、PloneLocalFolderNGというファイルシステム連携のプロダクトがありましたので、Data.fs のサイズを抑えつつ、こちらを便利に使っていました。

このプロダクトの良いところは、以下の通り。

  • Ploneの認証機能を利用しつつ、ファイルシステム上のコンテンツをマウントし、公開できる
  • コンテンツのインデクシングにも対応していて、ファイルについてのコメントやタイトル(ファイル名とは別)も、メタデータとして保持することができる
  • ファイルシステム側からコンテンツを登録することも、Ploneの側からコンテンツを登録することも可能

Ploneの稼動するサーバは、ActiveDirectory (AD) のメンバサーバーだったので、ファイルシステムからの書き込みはADで定義した編集用のユーザグループに許可していました。

同様に、Ploneを通しての書き込みも、PloneとLDAP(AD)の連携機能で、ADの編集用グループをPloneのメンバーグループに割り当てて権限設定を行っていました。

この機能があったおかげで、チーム内のPlone利用がどんどん進みました。特に、たくさんのコンテンツを一度に公開する場合、WebUIでアップするのは面倒です。定期的にプログラムで生成した、たくさんのコンテンツを公開する必要があったのですが、PloneにはWebDAV機能があると言っても、Windowsのクライアントがあまりよくなかったりして、ほとんどファイルシステム側からの操作が中心でした。

さて、Plone2.5が出るようになってから、残念ながら、PloneLocalFolderNGの開発は止まってしまったようでした。
プロダクトの公開はされているものの、Plone3には対応していませんので、このまま利用するわけには行きません。

何か代替案を考えないと…と、いろいろ探したところ、Reflecto というプロダクトを発見。
使ってみると、LocalFolderNGほど自由度は無く、メタデータの付加などは出来ないけれど、ローカルファイルシステムのファイルをPloneを通して表示でき、また、コンテンツのインデクシングも可能な模様です。

※ただし、文字コードはPloneサイトにあわせたもの、(常はUTF-8)でないといけません。

もう1つ、ファイルシステムにドキュメント(バイナリデータ)を保存するためのプロダクトとして、plone.app.blob というものがありました。

ZopeのDBはわたしにとってはブラックボックスなので、まずはこちらも導入してみました。
一見、何事もなくファイル(Office系ドキュメント)のアップロードや登録ができるようになったのですが、『実際のファイルはどこにあるんだろう?』という、根本的な疑問が沸いてきました…。

blobを利用するに当たって、zope.confに格納先を指定するのですが、その下を見てみると、0x00 ….. というディレクトリが何階層もできており、その先に、xxxxxx.blobというファイルがありました。

たとえば、こんな感じです。

0x00/0x00/0x00/0x00/0x00/0x16/0x4b/0x6e/0x0xxxxxxxxx.blob

ファイル名は、なにかしらハッシュを使って生成しているのだと思われます。でも、本来のファイル名を推測できる情報が、パスだけでは分からないので、plone.app.blobを使った場合も、ブラックボックスが単純に増えた…という感覚です(^^;

データの出し入れがWEBのインタフェースを通したアクセスのみの場合は、これで問題ないと思いますが、やはりファイルシステム側から更新することも、ZOPEを介さずに単独でデータを開くことも難しくなってしまいました。

Data.fsの肥大を防ぐという意味ではOKなのですが、なかなか悩ましいところです。

やっぱり、自分でプロダクト作るしかないのかな…と思うこのごろです。

0 件のコメント:

コメントを投稿