0

おそらく関連するトピックですが、問題を解決できませんでした:テーブルの値を使用して TurboGears 2 のグローバル変数を初期化する方法

問題は、Turbogears の app_globals.py でいくつかのグローバル変数を初期化するときに、データベースからいくつかの構成パラメーターを読み取ろうとしていることです。

ただし、データベースにアクセスしようとすると、次の例外が発生します。

sqlalchemy.exc.UnboundExecutionError: Could not locate a bind configured on mapper Mapper|Config|config_table, SQL expression or this Session

例外が述べているように、これはおそらくデータベースがまだバインドされていないためです(グローバルパラメータが最初に設定されます)。他のトピックから、グローバル変数を初期化する前に app_cfg.py に移動し、「on_startup」を使用してデータベースをバインドする方向に向けられましたが、うまくいきません。私が正しくやっていないか、これが問題の解決策ではありません。たとえば、次のように書いてみました。

def on_startup():
    print "Foo bar!!!"

base_config.register_hook('startup', on_startup)

ただし、print ステートメントは実行されません (クラッシュは前に発生します)。

ここからどこへ行くべきかについての指針はありますか?

前もって感謝します。

4

1 に答える 1

1

after_config フックを使用してapp_globalsの setup メソッドを呼び出し、データベースにアクセスしてセットアップに必要なデータを取得できます。

after_config フックは実際には完全なターボギア アプリケーションが構成された後に呼び出されるため、app_globals とデータベースの両方が構築および構成されます。使用している TG のバージョンに応じてconfig['tg.app_globals']、フックから app_globals にアクセスできます。config['pylons.app_globals']

after_config フックは Turbogears アプリケーション自体を返す必要があることに注意してください。取得したパラメーターを返すだけです。

于 2012-07-10T08:50:38.337 に答える