0

おなかのmemcached pythonラッパーの追加ラッパーとして機能するpythonスクリプトがあります。私はこのようなものを持っています:

class CacheIt(object):
  def __init__(self, host=<hostname>, port=11211, **kwargs):
    ...

memcached のホスト名を ini ファイルから取得できるようにしたいのですが、development.ini、production.ini、または test.ini から取得される可能性があるため、どのファイルを指定したくありませんか。現在のiniファイルの「検索」を動的にする必要があります。つまり、アプリケーションは現在のiniファイルが何であるかを認識し、設定からホスト名を取得する必要があります。

アプリケーションの起動時に戻り値が None であるため、スレッド ローカル get_current_request を使用して設定ファイルを取得することはできません (クラスのインスタンスを NewRequest イベントにアタッチします)。

これ:

from paste.deploy.loadwsgi import appconfig
config = appconfig('config:development.ini', 'myapp', relative_to='.')

それでも、これを使用するにはまずパスを知る必要があります。つまり、これを使用する場合、デプロイするたびに development.ini の値を production.ini に変更し、テストする場合は test.ini に変更する必要があります。確かに、これを行うためのより良い方法が必要です。

4

2 に答える 2

0

本当に最善の方法ではありませんが、ここにアイデアがあります。設定ファイルのパスをどこかに保存する必要があります。

設定ファイルのパスを設定ファイル内に保存することもできます...

そんな感じ:

config_file=%(here)s/development.ini

このファイルがロードされると、にそのファイルのエントリがありますconfig.registry.settings。そこから2つの選択肢があります。ファイルを書き込むのと同じように、現在の設定ファイルを使用してpidファイルを作成します。pidまたは、ライブアプリケーションから設定をクエリするためのAPI呼び出しを作成できます。正直、ファイルに書いてみます。アプリから設定を照会するのはあまり良くないようです。

次に、そのファイルを開き、file.iniへのパスを読み取ってから、構成ファイルとしてロードする必要があります。

または、次のようなことを試すことができます。

ps -ax | egrep "`cat pyramid.pid`.*[s]tart" | cut -d" " -f14

Pythonから実行している間は、「cut」を省略し、Pythonから自分で切り取って、configiniファイルを取得できます。

つまり、pyramid.pid内に含まれるpidに使用されるコマンドラインを取得しているため、このファイルはデーモンモードの場合にのみ作成されます。コマンドラインを使用すると、構成ファイルなどを取得できます。欠点は、pserveまたは実際にPIDを保存し、構成を引数として使用するものでのみ機能することです。uWSGIなどを使用している場合は、そのようなことができない場合があります。

于 2012-08-20T12:20:25.477 に答える
0

イベント ( NewRequest) 内でレジストリを取得できるため、その中のすべての設定を取得できます。

event.request.registry

完全なレジストリが含まれます。


私が持っている他の提案は、クラスのインスタンスを作成しmain()、残りの構成が完了したときにすべての構成を行うことです。これは、SQLAlchemy セットアップも同様に機能する方法です。簡単な例として、 CouchDB と Pyramidの統合を見てみましょう。Pyramid および .ini 構成で同じ回答が提供されました。ApplicationCreated構成が完了した直後で、リクエストが行われる前に memcache をセットアップしたい場合は、イベントに添付することもできます。

于 2012-10-31T07:23:19.603 に答える