2009/02/23(月)Ploneのメモ

メモです。当分、追記します。

手っ取り早くプロダクトを作りたい人はArchetypes のプロダクトサンプル参照。

FileSystemStorage

ZODBにファイルを保存せず、ローカルストレージにファイルを保存するためのプロダクト。似たようなもので、ExternalStorageというものがありますが、最近のPlone(3.x)ではATベースのFileSystemStorage一択の模様です(未確認)。

プロダクト製作者向けプロダクトで、これ単体では何の機能もしませんATPhoto*1などのプロダクトのストレージ下請けとして使用します。

インストール

install
Products/ フォルダ以下にコピー。
設定
Products/FileSystemStorage/etc/plone-filesystemstorage.conf.in を設定。デフォルトのままでもok。一番下にある <site /my/plone> は特定のパスでグローバルセッティングをoverrideするときにのみ設定。この際、必ずグローバルとは違うディレクトリを設定します(Warrning/エラーになります)。

confファイルの設定によって、必要なディレクトリを手動で作成します(自動では作成されません)。Zopeインスタンスのhomeから、次を実行。

$ mkdir var/fss_storage
$ mkdir var/fss_backup

きちんと動作するか、次で確認。

$ bin/zopectl test -s Products.FileSystemStorage

参考 : http://nagosui.org:8080/Nagosui/COREBlog2/exmediafile

*1 : 画像管理ソフト。ファイル管理ソフトもあり。Zipファイル転送などもできる。

ZPsycopgDA / Z SQL Method

PloneでPostgreSQLを使用して Z SQL Method を実現するためのプロダクトとしてZPsycopgDAがあります。プロダクト向けプロダクトではなく、テンプレートカスタマイズ向けプロダクトです。プロダクトでは、ZPsycopgDAの下請けであるpsycopgを直接使うほうが良いようです。

ZPsycopgDAの役割は2つです。

  • ZopeにPostgreSQLへの永続的接続を提供する。
  • Z SQL Method(組み込み済システム)のためのインターフェイスを、上記永続的接続により提供する。(結果的に、Z SQL MethodとしてPostgreSQLにアクセスできる)。

Z SQL Methodとは

Zope上のコンテンツとしてSQLを貼り付けることができるシステムです。まずZopeのマネージャから「Z Psycopg Database Connection」を適当なパスに対応付けて追加します。これが永続的接続を提供します(プロパティの設定法は後述)。続いて、「Z SQL Method」を追加すると利用可能な「Z Database Connection」が表示され、同時にSQL文を入力できるようになります。

例えば、Z SQL Methodとして「SELECT * FROM XTABLE」を plone/zsql_test に(plone/はploneのトップ)貼り付けたとします。ここでテンプレートから

<table tal:repeat="x here/zsql_test">
    <tr>
     <td tal:content="x/column1">カラム1</td>
     <td tal:content="x/column2">カラム2</td>
    </tr>
</table>

とすると、簡単に(Pythonのコードを書くことなく)テーブルの中身を表示できます。(参考

ほらZopeってすごいでしょうということみたいなのですが、そこにたどり着くまでが面倒くさすぎて微妙な感じも……

インストール

Debian系として進めます。まずpsycopgのインストールです。

# apt-get install python-psycopg

http://initd.org/pub/software/psycopg/ から psycopg-1.1.xx.tar.gz (最新版)をダウンロードする。psycopg-2.xx は利用できない。解凍すると、psycongのZopeプロダクトである ZPsycongDA が出てきます。このディレクトリを Plone の Product/ 以下にコピーします。

PostgreSQLの設定

ZPsycopgDAを追加・設定する前にPostgreSQLを設定します。すでにインストール済でパスワード接続が設定されていると仮定します(インストール方法の参考(あくまで参考です))。

管理者権限で接続し、必要なデータベースとユーザーを作成します。

~# psql postgres postgres
Password for user pgsql:
pgsql=# CREATE USER plone ENCRYPTED PASSWORD 'password';
pgsql=# CREATE DATABASE plonedb OWNER=plone ENCODING 'UTF-8';

ZPsycopgDAコンテンツの作成

Zopeのマネージャにアクセスします。

http://xxxx:8080/manage (URLは例です)

左フレームからすでに追加済のPloneサイトを選択します。右フレーム右上のプルダウンメニューから「Z Psycopg Database Connection」を選択します。

id は後で別プロダクトから参照するときに使用する名前です。適当に付けて忘れないようにします。「Enter a Database Connection String」には接続先データベース情報を書き込みます。次はサンプルになります。

dbname=plonedb user=plone password=test

Z Database Connectionのリストを取得する

from Products.ZSQLMethods.SQL import SQLConnectionIDs
list = SQLConnectionIDs( context )
list = SQLConnectionIDs( self )

psycopg

Python上で規格化されたDB-APIに準拠したPostgreSQL用ライブラリ*2。同じくDB-API対応のPyGreSQLでもかまわないのですが、psycopgの方がメジャーなようです。

プロダクトからデータベースを扱う場合は、直接psycongを利用するほうが良さそうです。永続的接続の仕組みは自力で作る必要があります。

参考資料

*2 : DB-APIというのはPythonの標準化APIのようで、これに準拠していればどれでも差し替え可能ということみたいです。なお、DB-API2.0対応のpsycopg2もありますが割愛。

ArchExamle

Archtypes用のPloneサンプルプロダクト。プロダクト開発用の下敷きに向いています。

で配布していますが、Plone3.1で動かないので、修正したファイルを置きました。

Product以下に展開するとアドオンプロダクトとして表示されるようになります。

参考:ArchExampleを読む

Zope Page Templete メモ

参考(日本語資料等)

ユーザーリストの取得

    acl_users = getToolByName(self, "acl_users")
    result = acl_users.searchUsers()

plone.app.blobのインストール

plone.app.blobとは、Plone3.xでZODB3.8を利用可能にし、しかもATFile(Ploneのファイルコンテンツの標準形式)をdata.fsではなくblobに保存する機能も持っています。

buildoutでのインストール

  1. python2.4とpython2.4-devを普通にインストールする(パッケージ利用)。
  2. このサイトを見てbootstrap.pyをダウンロードしbuildout.cfgを作成し(buildout.cfg:buildout.cfgのDL)、2つのファイルを1つのディレクトリに入れる。
  3. そのディレクトリに移動し、次のコマンドを順に入れる。
    $ python2.4 bootstrap.py
    $ bin/buildout
    
  4. "bin/instance fg"でZopeを起動する。
  5. http://xxxx:8080/manage/に ID:admin/PASS:admin アクセスする。
  6. Ploneサイトを追加する。
    plone.app.blob-01.png
    plone.app.blob-02.png

Plone Site追加時に、プルダウンの一番下に plone.app.blob という表示がありますが、これを選択しても動きません。また Plone サイト追加詳細画面ではプロファイルとして "plone.app.blob: ATFile replacement" を選択します。これにより、Ploneのファイルコンテンツがblob(Data.fsではないファイルシステムに)保存されるようになります。

スタンダードインストールの場合

Zope/Ploneインスタンスが /home/xxx/plone に作成済として解説します。Python2.4開発環境をあらかじめ入れておいてください。Debian系ならば

# apt-get install python2.4-dev

easy_installを利用して、plone/lib/python 以下に plone.app.blob と必要なライブラリ一式をインストールします。

$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ python2.4 ez_setup.py
$ export PYTHONPATH="/home/xxx/plone/lib/python"

$ wget http://download.zope.org/distribution/ZConfig-2.4a6.tar.gz
$ wget http://download.zope.org/distribution/zdaemon-1.4a2.tar.gz
$ wget http://pypi.python.org/packages/source/p/plone.app.blob/plone.app.blob-1.0b2.tar.gz

$ easy_install-2.4 --install-dir="~/plone/lib/python" ZConfig-2.4a6.tar.gz
$ easy_install-2.4 --install-dir="~/plone/lib/python" zdaemon-1.4a2.tar.gz
$ easy_install-2.4 --install-dir="~/plone/lib/python" plone.app.blob-1.0b2.tar.gz

続いて、これらのライブラリを優先して読み込ませるために、bin/zopectl に細工します。bin/runzope を利用する場合は、そちらにも同様の細工をしてください。

# PYTHONPATH="$SOFTWARE_HOME:$PYTHONPATH"
PYTHONPATH="$INSTANCE_HOME/lib/python:$SOFTWARE_HOME:$PYTHONPATH"

etc/zope.conf に blob の設定を記述します。

<zodb_db main>
    # Blob-enabled FileStorage database
    <blobstorage>
      blob-dir /home/xxx/plone/var/blobstorage
      <filestorage>
        path /home/xxx/plone/var/Data.fs
      </filestorage>
    </blobstorage>
    mount-point /
</zodb_db>

最後に、blobをZopeプロダクトとして認識させるため、etc/package-includes/plone.app.blob-configure.zcml を作成し、次のように記述します。

<include package="plone.app.blob" file="configure.zcml" />

既にPloneが動作済の場合は、Ploneのサイト設定からアドオンとして "plone.app.blob: ATFile replacement 1.0b2 " を追加すれば良いようです。Data.fs内の旧ファイルを引き継ぐ場合はミグレーションが必要ですが、やり方は調べてないので割愛します。これについては配布元サイトを参照ください。