2

.ini ファイル

cache.regions = default_term, second, short_term, long_term
cache.type = memcached
cache.url = 127.0.0.1:11211
cache.second.expire = 1
cache.short_term.expire = 60
cache.default_term.expire = 300
cache.long_term.expire = 3600

__init__.pyファイル

from pyramid_beaker import set_cache_regions_from_settings
def main(global_config, **settings):
set_cache_regions_from_settings(settings)
...

test.py ファイル

from beaker.cache import CacheManager
from beaker.util import parse_cache_config_options

cache_opts = {
'cache.data_dir': '/tmp/cache/data',
'cache.lock_dir': '/tmp/cache/lock',
'cache.regions': 'short_term, long_term',
'cache.short_term.type': 'ext:memcached',
'cache.short_term.url': '127.0.0.1.11211',
'cache.short_term.expire': '3600',
'cache.long_term.type': 'file',
'cache.long_term.expire': '86400',
}

cache = CacheManager(**parse_cache_config_options(cache_opts))

@cache.region('short_term', 'test')
def test_method(*args, **kwargs):

上記のコードを実行すると、エラーが発生します。

...
File "c:\python27\lib\site-packages\python_memcached-1.48-py2.7.egg\memcache.py", line      1058, in __init__
self.port = int(hostData.get('port', 11211))
TypeError: int() argument must be a string or a number, not 'NoneType'

エラーの原因/または何か不足している可能性がありますか??

4

1 に答える 1

3

テスト構成を見てください。url設定にエラーがあります。

'cache.short_term.url': '127.0.0.1.11211',

:そこにはコロンがないことに注意してください。使用するmemcachedモジュールは、正規表現を使用してその値を解析しようとしportます。その値をホストとして指定すると、そのメソッドはNoneに設定されます。

>>> host = '127.0.0.1.11211'
>>> re.match(r'^(?P<host>[^:]+)(:(?P<port>[0-9]+))?$', host).groupdict()
{'host': '127.0.0.1.11211', 'port': None}

これがトレースバックのソースです。dictを次のように変更cache_optsします。

'cache.short_term.url': '127.0.0.1:11211',

そして物事はうまくいくでしょう:

>>> host = '127.0.0.1:11211'
>>> re.match(r'^(?P<host>[^:]+)(:(?P<port>[0-9]+))?$', host).groupdict()
{'host': '127.0.0.1', 'port': '11211'}
于 2012-08-29T13:28:24.300 に答える