2014-03-31 50 views
3

我想爲我的Django網站使用heroku插件'MemCacheCloud'來配置MemCached。當我運行正試圖獲取代碼/設置緩存,然後我收到以下錯誤無法在Heroku上配置MemCached

Mar 31 19:36:17 mycloudapp app/web.1: File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 115, in get_response 
Mar 31 19:36:17 mycloudapp app/web.1:  response = callback(request, *callback_args, **callback_kwargs) 
Mar 31 19:36:17 mycloudapp app/web.1: File "/app/.heroku/python/lib/python2.7/site-packages/newrelic-2.12.0.10/newrelic/hooks/framework_django.py", line 492, in wrapper 
Mar 31 19:36:17 mycloudapp app/web.1:  return wrapped(*args, **kwargs) 
Mar 31 19:36:17 mycloudapp app/web.1: File "/app/jobs/views.py", line 53, in job_view 
Mar 31 19:36:17 mycloudapp app/web.1:  skill_list = get_all_skills() 
Mar 31 19:36:17 mycloudapp app/web.1: File "/app/common/dataaccess.py", line 13, in get_all_skills 
Mar 31 19:36:17 mycloudapp app/web.1:  cache.set(ALL_SKILLS, skill_list) 
Mar 31 19:36:17 mycloudapp app/web.1: File "/app/.heroku/python/lib/python2.7/site-packages/django/core/cache/backends/memcached.py", line 71, in set 
Mar 31 19:36:17 mycloudapp app/web.1:  self._cache.set(key, value, self._get_memcache_timeout(timeout)) 
Mar 31 19:36:17 mycloudapp app/web.1: File "/app/.heroku/python/lib/python2.7/site-packages/newrelic-2.12.0.10/newrelic/api/memcache_trace.py", line 70, in __call__ 
Mar 31 19:36:17 mycloudapp app/web.1:  return self._nr_next_object(*args, **kwargs) 
Mar 31 19:36:17 mycloudapp app/web.1: File "/app/.heroku/python/lib/python2.7/site-packages/bmemcached/client.py", line 126, in set 
Mar 31 19:36:17 mycloudapp app/web.1:  returns.append(server.set(key, value, time)) 
Mar 31 19:36:17 mycloudapp app/web.1: File "/app/.heroku/python/lib/python2.7/site-packages/bmemcached/protocol.py", line 372, in set 
Mar 31 19:36:17 mycloudapp app/web.1:  return self._set_add_replace('set', key, value, time) 
Mar 31 19:36:17 mycloudapp app/web.1: File "/app/.heroku/python/lib/python2.7/site-packages/bmemcached/protocol.py", line 345, in _set_add_replace 
Mar 31 19:36:17 mycloudapp app/web.1:  time, key, value)) 
Mar 31 19:36:17 mycloudapp app/web.1: File "/app/.heroku/python/lib/python2.7/socket.py", line 224, in meth 
Mar 31 19:36:17 mycloudapp app/web.1:  return getattr(self._sock,name)(*args) 
Mar 31 19:36:17 mycloudapp app/web.1: File "/app/.heroku/python/lib/python2.7/socket.py", line 170, in _dummy 
Mar 31 19:36:17 mycloudapp app/web.1:  raise error(EBADF, 'Bad file descriptor') 
Mar 31 19:36:17 mycloudapp app/web.1: error: [Errno 9] Bad file descriptor 

我的代碼來訪問緩存dataaccess.py -

from django.core.cache import cache 

ALL_SKILLS = "allskills" 
def get_all_skills(): 
    skill_list = cache.get(ALL_SKILLS) 
    if not skill_list: 
     skill_list = MySkillTable.objects.all() 
     cache.set(ALL_SKILLS, skill_list) 
    return skill_list 

我的settings.py有入口

CACHES = { 
     'default': { 
     'BACKEND': 'django_bmemcached.memcached.BMemcached', 
     'LOCATION': get_env_setting('MEMCACHEDCLOUD_SERVERS').split(','), 
     'OPTIONS': { 
        'username': get_env_setting('MEMCACHEDCLOUD_USERNAME'), 
        'password': get_env_setting('MEMCACHEDCLOUD_PASSWORD') 
      } 
     } 
} 

當我在評論dataaccess.py cache.set & cache.get線,代碼完美的作品。

+0

獲取相同的東西。你找到解決方法嗎? – johnboiles

+1

@johnboiles - 我通過電子郵件發送了同樣的支持,得到了回覆,看到我的堆棧跟蹤後,他們在'bmemcached'中發現了一些錯誤。他們修復了錯誤並將修補程序提交給了'bmemcached',但現在由bmemcached團隊發佈新版本。他們告訴我使用[pylibmc](https://github.com/lericson/pylibmc)的解決方法。我沒有嘗試過,因爲現在我使用的是不同的附加組件,例如[redis雲](https://addons.heroku.com/marketplace/rediscloud) – anuragal

+0

@anuragal您應該回答自己的問題。如果您知道他們記錄了哪個[問題](https://github.com/jaysonsantos/python-binary-memcached/issues),則可以將其鏈接。 –

回答

1

感謝@ChrisWesseling的建議。

根據來自支持的通信,issue#25針對上述問題開放。現在它已被修復,並且根據它們,pip存儲庫也隨此修復程序一起更新。