INI ファイル

Pyramid アプリケーション中の “[app:main]” セクションには、 Pylons におけ る同等のアプリケーションとは異なるオプションがあります。以下に Pyramid の “alchemy” scaffold で “[app:main]” セクションがどうなっているか を示します:

[app:main]
use = egg:{{project}}

pyramid.reload_templates = true
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.debug_templates = true
pyramid.default_locale_name = en
pyramid.includes =
    pyramid_debugtoolbar
    pyramid_tm

sqlalchemy.url = sqlite:///%(here)s/{{project}}.db

“pyramid.includes=” 変数は、有効にしようとするいくつかの “tween” が 列挙されています。tween は WSGI ミドルウェアに似ていますが、 Pyramid に 特有のものです。”pyramid_debugtoolbar” はデバッグツールバーです; それは、 すべてのページのリクエスト変数およびランタイム状態についての情報を提供 します。

“pyramid_tm” はトランザクションマネージャです。 Pylons にはこれに相当 するものはありませんが、 TurboGears と BFG の中で使用されています。 pyramid_tm は、 SQLAlchemy セッション、あるいは電子メール送信のような 潜在的に別の種類のトランザクションを管理するための、リクエスト全体に 渡るトランザクションを提供します。これは、ビューの中で DBSession.commit() を呼ぶ必要はないということを意味します。それは リクエストの終わりに自動的にデータベースセッションをコミットし、すべて の未送信の電子メールも送るでしょう。ただしセッション中で uncaught 例外が 上げられた場合、トランザクションはロールバックされます。それはリクエスト 全体に渡るトランザクションが常にコミットかロールバックかのいずれかに なるようにする、あるいは他のあらゆるコードが何かをコミットすることを防ぐ、 という機能を持っています。

他の “pyramid.*” オプションは、デバッグ用です。サブシステムが行っている ことをログに記録するためには、これらを true に設定してください。メッセージ は DEBUG レベルでログに記録されるでしょう (これらが INI ファイル下部の logging 設定にない理由は、 INI スタイルの logging 設定が採用される以前に Pyramid の歴史の初期に確立されたためです)。

“pyramid.reload_templates=true” の場合、テンプレートエンジンはテンプレート をレンダリングする度にテンプレートソースファイルのタイムスタンプを チェックし、もしそのソースが変わっていればテンプレートを再コンパイルし ます。これは、この機能をサポートするテンプレートエンジンおよび Pyramid テンプレートアダプタでのみ機能します。 Mako と Chameleon はこれを行います。

“sqlalchemy.url=” という行は SQLAlchemy 用です。 “%(here)s” は INI ファイルを含むディレクトリのパスに展開されます。 SQLAlchemy, Mako, Beaker を含め、それらを理解するあらゆるライブラリのための設定を加える ことができます。さらに、アプリケーションコードが理解するカスタム設定を 定義することができます。その結果、コードを変更せずに、異なる設定でそれ をデプロイすることができます。これは Pylons の場合とまったく同様です。

production.ini は、 “pyramid_debugtoolbar” tween が 存在しない 以外 は development.ini と同じ app 設定を持っています。また、デバッグ設定は すべて false です。デバッグツールバーは潜在的なセキュリティホールなので プロダクション環境では無効に しなければなりません: 強制的に例外を 起こして対話型のトレースバックを見ることができれば誰でもアプリケーション プロセス内で任意の Python コマンドを実行することができ、したがってファイル を読んだり修正したりプログラムを実行したりすることができます。そのため、 サイトがインターネット上でアクセス可能な場合、デバッグツールバーを有効 にしないでください。例外は、おそらくより高レベル (Apache) のアクセス制限 によって信頼できる開発者とベータテスタだけがサイトへのアクセスを許可 されるような広域開発 (wide-area development) シナリオでしょう。

Pyramid は、もはやデフォルトで WSGI ミドルウェアを使用しません。ほとんど の場合、等価な処理を行う tween または Pyramid アドオンパッケージを見つける ことができます。自分のミドルウェアを有効化する必要がある場合は、 Pylons の場合と同じ方法で行ってください; その文法は PasteDeploy manual に あります。しかし、 Pyramid tween を作成することが同じくらい便利ではない かと最初に考えてください。 tween はミドルウェアよりはるかに単純な API を持っており、ビューの request および response オブジェクトにアクセスで きます。 WSGI プロトコルは、エッジケースのために正確に実装することは 非常に困難で、また多くの既存のミドルウェアは不正確です。それらの問題に ついてサーバー開発者およびフレームワーク開発者を心配させてください; 単に tween を書き、午後 3 時までにゴルフ場に出かけることができます。

Previous topic

アプリケーションの起動

Next topic

main 関数