TurboGears?の設定
TurboGears?は外部設定がほとんどなく、トラブルが最小になるようにデザインされています。多くのアプリケーションでは tg quickstart の設定から変更する必要があるのはデータベースの場所だけです。
設定レイアウト
quickstartによって生成されたアプリケーションには3つの設定ファイルがあります:
- dev.cfg
- sample-prod.cfg
- package_name/config/app.cfg
dev.cfg ファイルはアプリケーション開発時に使われるファイルです。
sample-prod.cfg は "実際の" デプロイのための適切な設定を含んでいます。実際にアプリケーションをデプロイする前に、このファイルを prod.cfg とリネームし、設定を調整することをお勧めします。
app.cfg はプログラムが稼働する環境に関係なく常に同じであるオプションを含みます。 dev.cfg や prod.cfg がほとんどデータベースの設定やポート、自動再読込に関わっているのに対し、 app.cfg はエンコードや出力、認証の設定を含んでいます。
tg-admin runserver や start-*appname*.py によって起動したサーバはデフォルトで dev.cfg を使用します。これはコマンドラインのパラメータに他の設定ファイルへのパスを渡せば変更できます:
tg-admin runserver prod.cfg
設定シンタクスとセクション
設定のシンタクスは標準的なiniフォーマットの拡張バージョンとなっています。主な拡張した点はセクションの重要性を挙げたことと、ハードコードなファイルパスの数を減らすためにテンプレート変数を追加したことです。
設定ファイルの [global]? セクションは起動時にサーバ全体に適用される設定のためのものです。CherryPyもパスベースの設定セクションを利用し、これはフィルタやサイトの一部にのみ適用される設定に用いられます。例えば以下のような例では tg.allow_json はサイトの /admin だけ にセットされます。
[/admin] tg.allow_json = True
また二つのテンプレート変数があります。一つは current_dir_uri で、これは現在のディレクトリへの絶対ファイルシステムパスとなります。これはsqliteのdburiの中で用いられていますが、他の部分で利用することも可能です:
sqlobject.dburi="sqlite://%(current_dir_uri)s/devdata.sqlite"
二つ目は top_level_dir で、アプリケーションディレクトリ(quickstartで生成されたプロジェクトの controllers.py が存在する場所)への絶対ファイルシステムパスとなります。これはプロジェクトが他のサーバへ移動したようなときに、静的コンテンツのファイルパスを得るために app.cfg で用いられています。
CherryPyの設定
TurboGears?はCherryPyの設定システムを利用しています。このドキュメントではCherryPyの設定や便利なことについて詳細にはふれませんが、ごく一般的なオプションのちょっとしたリストを示します。
- server.socket_host -- ""
- この設定はCherryPyを特定のipアドレスへバインドする。 CherryPyはデフォルトですべての接続をlistenするので、普通はこの設定は必要ない
- server.socket_port -- 8080
- CherryPyがHTTP接続をlistenするポート
- server.socket_file -- ""
- CherryPyをローカルでプロキシさせるときにlistenするパイプ
- server.log_to_screen
- スクリーンへサーバのログを送る。プロダクト環境ではパフォーマンスを良くするためにoffにするのがよい
- server.log_file
- ログファイルへのパス。空の場合はログはディスクへ保存されない
- autoreload.package -- "*packagename*"
- インポートされたモジュールに 少しでも 変更があったときにリロードするCherryPyの自動再読込機能。これはいくつかのファイルをチェックする必要があり、またzipされたEggファイルとは互換性がない。TurboGearsは変更を監視するためにこの設定パラメータを特定のパッケージに送る。ほとんどのアプリケーションにとってこれは適正である
- server.environment
- "development" か "production のどちらか。 development オプションは自動再読込や様々なエラー報告ツールを有効にし、 production オプションはパフォーマンスのためにそれらすべてを無効にする。詳しくは CherryPy server.environment ドキュメントを参照
- server.webpath
URLを生成する時に使われるサイトのルートを特定する。TurboGearsインスタンスがウェブサーバのルートになっていないときに使う。たとえばアプリケーションが /my_app ではなく /turbogears/my_app にあるとき、これを server.webpath = "/turbogears/" と設定する
注意: 名前はともかく、このオプションはCherryPyのTurboGears拡張であり、 tg.url() function で用いられます。
CherryPyのオプションをさらに完全に把握するためのことは、CherryPyのサイト、特に 設定システムの概要 と 設定オプションのリファレンス に任せます。
dev.cfg と prod.cfg の設定リファレンス
- sqlobject.dburi
アプリケーションで用いるデータベースを指定するURI。URIの一般的なフォームは databasetype://username:password@hostname:port/databasename
URIの先頭に notrans_ をつけると、自動データベーストランザクションが無効になる
sqlite を使用する場合には、フォーマットは file:// URL: sqlite:///absolute_path_to_file という感じになることに注意しておくこと。またWindowsを使っている場合には、ドライブレターを指定する歳、:の代わりに|を使うことに注意すること。例えば: sqlite:///d|databases/foo.db は D:\databases\foo.db を指す
MySQL? ユーザは以下のことに注意すること: If you use a different socket than /tmp/mysql.sock 以外のソケットを使用する場合には、dburiに unix_socket 引数によってどのソケットを使うのかを指定する必要がある。すなわち、 mysql://user:pass@host:port/db?unix_socket=/path/to/mysql.sock のようにする
- tg.strict_parameters -- False
- True の場合、コントローラに期待しないパラメータが渡されるとTurboGearsがエラーを吐く。コードのtypoを発見するには便利。プロダクト環境では、URLをミスタイプした場合、あるいは不正なパラメータが渡された場合に、それぞれ404あるいは200エラーを返す
app.cfg の設定リファレンス
- tg.defaultview -- "kid"
デフォルトでどのテンプレートエンジンを使うのかを決定する。設定されていない場合はKidが用いられる。
Kid以外のオプションの概要は 他のテンプレートエンジンを使う セクションを参照
- tg.allow_json -- False
- False にセットすると、 ?tg_format=json が無効になる。 expose() デコレータの中で allow_json を True にするか、 default_format='json' をセットする必要がある
- tg.include_widgets -- []
サイトのすべてのページで自動的にそのウィジェットをインクルードする。ウィジェットをパッケージした tg.mochikit のようなJavaScriptライブラリをセットすると便利
注意: このオプションは tg.mochikit_all に置き換わりました。同様の効果を得るためには、 tg.include_widgets = ['turbogears.mochikit']? としてください。
- tg.sitetemplate
- 再利用の目的のために作られたアプリケーションは、すべてのページが際とテンプレートを拡張していることを確認すべきである。この設定変数は、どのテンプレートをサイトテンプレートとして用いるかをセットする。値は引用符をつけた *packagename*.templates.templatename のようなフォーマットになる
- kid.outputformat
- Kidテンプレートがレンダリングされる際に用いられる出力フォーマットをセットする。デフォルトではほとんどのウェブアプリケーションにとって最適であるHTMLファイルが生成される。XHTMLやXMLを出力する必要がある場合には、それをここにセットすればよい。 利用可能な出力メソッドについてのさらなる情報 がある。
- kid.encoding -- "utf-8"
- Kidテンプレートの出力エンコーディングをセットする
- tg.scheduler -- False
- True をセットすると Scheduler スレッド/処理がサーバ起動時にスタートする
Visit と Identity の設定リファレンス
tg-admin quickstart においてidentityを使うかどうかのプロンプトに対し "yes" を選択すると、モデルの中にいくつかのテーブルが生成され、 app.cfg の中に以下のオプションが現れます:
Visit
- visit.on -- True
- トラッキングを有効にする。これは、アプリケーションにアクセスした訪問者に対して、ブラウザのクッキーで固有の追跡IDを割り当てることを意味する
- visit.timeout -- 20
- visitがアイドル状態になる時間(分数)
- visit.cookie.name -- "tg-visit"
- クッキーの名前
- visit.cookie.domain -- None
クッキーをセットするときのドメイン名(RFC2109に従い、.から始める必要がある)。コンピュータ名が spam.eggs.foo.com であるときに、他のアプリケーションの中で使われている foo.com ドメインのクッキーをセットしたいようなときに便利
注意: ほとんどのケースではデフォルト(None)でうまくいきますが、 localhost は妥当な値ではないし、うまく動きもしないでしょう。
- visit.cookie.path -- "/"
- クッキーのパスを指定する。デフォルトではサイト全体である
- visit.manager -- "sqlobject"
- トラッキングに使うVisitManagerプラグインの名前
- visit.soprovider.model -- "*appname*.model.Visit"
- トラッキングに使うデータベースクラス
Identity
- identity.on -- True
- turbogears.identity モジュールを有効にする
- identity.failure_url -- "/login"
- アクセス制御のチェックが失敗した時にCherryPyが内部でリダイレクトするURL。Identityが有効の場合は、このオプションの値は 必ず 指定されていなければならない
- identity.source -- "form,http_auth,visit"
リクエストと結びついたidentityを決定する際に、そのプロバイダとして何をソースとするのかをセットする。カンマで区切ったリストであらわす。オプションの詳細については Identityドキュメント を参照
利用できるオプション: form, visit, http_auth
Provider
これらのオプションは、デフォルトのidentityプロバイダプラグインを利用する時にのみ適用可能です。TurboGearsではSQLOBjectとSQLAlchemyをidentityプロバイダとして提供しています。これらはそれぞれ soprovider と saprovider であり、同じオプションを持ちます。
- identity.*provider.model.user -- "*appname*.model.User"
- プロバイダのユーザモデルのデータベースクラス
- identity.*provider.model.group -- "*appname*.model.Group"
- プロバイダのグループモデルのデータベースクラス
- identity.*provider.model.permission -- "*appname*.model.Permission"
- プロバイダのパーミッションモデルのデータベースクラス
- identity.*provider.encryption_algorithm -- None
データベースのパスワードと照合する際に用いられる暗号化アルゴリズム md5 か sha1 を選ぶことができる。指定しない場合はふつうのテキストとなるだろう
identityプロバイダはパスワードを おそらく 暗号化するだろう。identityが起動しているときにプロパティで my_user.password = 'secret' などとしてパスワードをセットする、あるいは(テスト段階でidentityが起動していないような場合には)利用する暗号化の種類を指定した設定を読み込めばデータベース内では暗号化された状態になるだろう。
アプリケーションから設定値を得る
turbogears.config.get('key'[,default]?) 関数を用いれば値を得ることができます:
>>> from turbogears import config
>>> config.get('sqlobject.dburi','sqlite:///:memory:') #second value is optional default value
'sqlite:///:memory:'

