起動方法
はじめて起動するときは、そのまえにセキュリティ設定ファイルを作る必要が あります。とりあえずは雛型のファイルをコピーするだけで済ませましょう。 詳しい中身はおいおい触れたいと思います。
cp sample_principals.zcml principals.zcml
普通に起動してみましょう。z3.pyを実行します。
./z3.py
以下のようなメッセージが出れば起動成功です。終了するには起動したターミ ナルでCtrl-Cしてください。
./z3.py
------
2005-09-08T23:58:40 INFO WSGIHTTPServer zope.server.http (WSGI-HTTP) started.
Hostname: pwm
Port: 8080
------
2005-09-08T23:58:40 INFO root Startup time: 25.470 sec real, 8.720 sec CPU
HTTPサーバが8080ポートで動いているので、ブラウザでアクセスできます。
ちなみにz3.pyを直接起動しないで、プロセス監視デーモンと一緒にZopeを起 動する方法もあります。その場合はこうします。
./bin/zopectl start
終了するときはこうです。
./bin/zopectl stop
zopectlはその他にも便利な機能があります。調べてみてください。
さて、さきほどコピーして作ったprincipal.zcmlの中には、Zopeにアクセスする ときに使うアカウント情報が記述されています。
<principal
id="zope.sample_manager"
title="Sample Manager"
login="gandalf"
password="123"
/>
この設定があるので、ID:gandalf パスワード:123でZopeの管理画面(ZMI)にロ グインできます。今回はZMIの使い方には触れません。あしからず。
起動するまでプロセスと設定ファイル
さて、起動するまでに内部でどんな処理が行われているかをざっと説明したい と思います。
z3.pyを実行すると、zope.app.server.mainのmain関数が呼び出されます。こ こに起動時の処理が集約されていますので、詳しくはソースコードを読んで確 かめてください。
ここではおおざっぱにみていきたいと思います。
zope.confを読み込む
はじめにzope.confが読み込まれ、そこに記述されている設定がロードされま す。
zope.confはZopeの環境設定、低レベルレイヤーの設定といえるものです。
使いたいサーバ(httpとftp、ポート)やログの保存先、内蔵のオブジェクトデー タベースの設定などを行います。
また、次にでてくる設定ファイルsite.zcmlの在処もこのファイルに記述します。
zope.conf.inというファイル名になっている場合もあります。
site.zcmlを読み込む
次に読み込むのはsite.zcmlというファイルです。zope.confの site-definitionの項で指定されています。
手元のファイルの中身はこんな感じです。
<configure xmlns="http://namespaces.zope.org/zope">
<include files="zopeskel/etc/package-includes/*-meta.zcml" />
<include package="zope.app" />
<include files="zopeskel/etc/package-includes/*-configure.zcml" />
<!-- 自分で足しました -->
<include files="package-includes/*-configure.zcml" />
<!-- Provide local overrides of standard configurations-->
<includeOverrides files="zopeskel/etc/package-includes/*-overrides.zcml" />
<includeOverrides file="overrides.zcml" />
<include file="securitypolicy.zcml" />
<include file="principals.zcml" />
</configure>
このファイルは拡張子のとおり、ZCML(Zope Configuration Markup Language) というXMLフォーマットの言語で記述されています。
ZCMLはZope3の非常に重要なコンセプトの一つで、高レベルなアプリケーショ ンの設定を行うための設定用言語です。
site.zcmlはZopeが起動するときに最初に読み込むZCMLで、このファイルの中 にさらに読み込むべきZCMLが<include>タグを使って記述されています。
ZCMLの詳しい説明は避けますが、ZCMLにはタグ拡張機能があり、使えるタグを 増やすことができます。
ZCMLの命名ルールでは、*-meta.zcmlがタグを拡張するファイル、 *-configure.zcmlがアプリケーションの設定用ファイルと決められています。
そのため、*-meta.zcmlをさきに読み込んでタグを拡張し、そのあとで拡張タ グを使っている*-configure.zcmlを読み込んでいるわけです。
こうして、次から次へと全てのZCMLを読み込み、そこに記述された設定をロー ドしおえると、Zopeのメモリ上に全コンポーネントの関係性が構築されます。
全コンポーネントの関係性?
これはコンポーネントアーキテクチャと言われるものでZope3の設計そのもの を指すのですが、これについてはまた別のコラムで触れましょう。
ZCMLの読み込みに失敗することもある
Zopeの開発はPython書いたらZCML書いて...、この繰り返しです。当然ZCMLを 書き間違えることがあります。そうすると、起動プロセスがここまできた段階 でZopeはエラーメッセージを出力して落ちてしまいます。
長々とトレースバックがでますが、重要な情報はほとんど最後のほうだけです。 エラーメッセージをちゃんと読めば、何行目何列目で何がマズかったのか書い てあります。
zope.configuration.xmlconfig.ZopeXMLConfigurationError:
File "/home/jseep/Projects/Zope3/site.zcml", line 9.2-9.55
ZopeXMLConfigurationError:
File "/home/jseep/Projects/Zope3/package-includes/formlib-configure.zcml", line 1.0-1.33
ConfigurationError: ('Invalid value for', 'package',
'ImportError: Module zope has no global formlb')
そのあと
ZCMLを無事に読み込むと、zope.confの設定どおりに、データベースのオープ ン、スレッド起動、サーバ起動を経て、メインループに入ります。
今回はここまでです。いかがだったでしょうか。フィードバックもお待ちして います。