python - 带有 memcached : how to make it work? 错误的 Pyramid - MissingCacheParameter:需要 url

标签 python memcached pyramid beaker

我在 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。

首先,我已经从 Ubuntu 官方存储库安装了软件包 memcached,并将 python-memcached 安装到了我的 virtualenv。

.ini 文件中,我替换了 cache.type = memory -> cache.type = memcached。我有下一个错误:

beaker.exceptions.MissingCacheParameter

MissingCacheParameter: url is required

我做错了什么?

提前致谢!

最佳答案

因此,使用 TurboGears documentation作为指导,您对网址有哪些设置?

[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 requires a 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 作为参数会更简单。


稍后:回答您的下一个问题:

when I used cache.url I've got next error: AttributeError: 'MemcachedNamespaceManager' object has no attribute 'lock_dir'

我会说,按照我阅读下面代码的方式,您必须提供 lock_dirdata_dir 来初始化 self.lock_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'

关于python - 带有 memcached : how to make it work? 错误的 Pyramid - MissingCacheParameter:需要 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144206/

相关文章:

python - pd.cut 的令人困惑的结果

mysql - 像片段一样缓存 activerecord 结果

hibernate - 扩展EhCache

python - sqlalchemy apache mod_wsgi Pyramid 崩溃

python - 为什么 python 帮助类将 str 类的子类解释为模块名称?

Python 泛型和子类

python - 如何制作对数最佳拟合线?

java - 我可以在 Google App Engine 上实例化 2 个 memcache 类吗?

python - Pyramid i18n 使用两个语言环境目录

python - 环境变量或 pserve 参数中的 Pyramid 服务器端口