3

Pyramid フレームワークにサイトがあり、memcached でキャッシュしたいと考えています。テストのため、メモリ タイプ キャッシュを使用しましたが、すべて問題ありませんでした。pyramid_beakerパッケージを使用しています。これが私の以前のコードです(作業バージョン)。

ファイル.ini

cache.regions = day, hour, minute, second
cache.type = memory
cache.second.expire = 1
cache.minute.expire = 60
cache.hour.expire = 3600
cache.day.expire = 86400

views.py で:

from beaker.cache import cache_region

@cache_region('hour')
def get_popular_users():
    #some code to work with db
return some_dict

.iniドキュメントで見つけた唯一の設定は、メモリとファイルの種類のキャッシュの操作に関するものでした。しかし、memcached を使用する必要があります。

まず、memcachedUbuntuの公式リポジトリとpython-memcachedvirtualenvにパッケージをインストールしました。

.ini私が置き換えたファイルでは- cache.type = memory> cache.type = memcached. そして、次のエラーがあります:

beaker.exceptions.MissingCacheParameter

MissingCacheParameter: URL が必要です

私は何を間違っていますか?

前もって感謝します!

4

1 に答える 1

4

では、 TurboGears のドキュメントをガイドとして使用すると、URL にはどのような設定があるのでしょうか?

[app:main]
beaker.cache.type = ext:memcached
beaker.cache.url = 127.0.0.1:11211
# you can also store sessions in memcached, should you wish
# beaker.session.type = ext:memcached
# beaker.session.url = 127.0.0.1:11211

memcached が正しく初期化するために URL が必要であるかのように私には見えます:

def __init__(self, namespace, url=None, data_dir=None, lock_dir=None, **params):
    NamespaceManager.__init__(self, namespace)

    if not url:
        raise MissingCacheParameter("url is required") 

コードで url をオプション (デフォルトで None) にすることを許可し、それを必要とする理由がよくわかりません。URLを引数として要求するだけの方が簡単だったと思います。


後で: 次の質問への回答として:

cache.url を使用すると、次のエラーが発生しました: AttributeError: 'MemcachedNamespaceManager' object has no attribute 'lock_dir'

私が以下のコードを読む方法は、self.lock_dir を提供するか初期化する必要があると言えますlock_dirdata_dir

    if lock_dir:
        self.lock_dir = lock_dir
    elif data_dir:
        self.lock_dir = data_dir + "/container_mcd_lock"
    if self.lock_dir:
        verify_directory(self.lock_dir)

このテスト コードを使用して、その正確なエラーを再現できます。

class Foo(object):
    def __init__(self, lock_dir=None, data_dir=None):
        if lock_dir:
            self.lock_dir = lock_dir
        elif data_dir:
            self.lock_dir = data_dir + "/container_mcd_lock"
        if self.lock_dir:
            verify_directory(self.lock_dir)

f = Foo()

次のようになります。

>>> f = Foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 7, in __init__
AttributeError: 'Foo' object has no attribute 'lock_dir'
于 2012-02-04T20:54:37.197 に答える