【问题标题】:Not able to configure MemCached on Heroku无法在 Heroku 上配置 MemCached
【发布时间】:2014-03-31 14:26:28
【问题描述】:

我正在尝试使用 heroku 插件“MemCacheCloud”为我的 Django 网站配置 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 行时,代码运行良好。

【问题讨论】:

  • 得到同样的东西。您找到解决方法了吗?
  • @johnboiles - 我通过电子邮件发送了同样的支持,得到回复说,在看到我的堆栈跟踪后,他们在bmemcached 中发现了一些错误。他们修复了这个错误并将补丁提交给bmemcached,但现在由 bmemcached 团队发布新版本。他们告诉我使用pylibmc 的解决方法。我还没有尝试过,因为现在我正在使用不同的附加组件,即redis cloud
  • @anuragal 你应该回答你自己的问题。如果你知道他们登录了哪个issue,你可以链接它。

标签: django heroku memcached


【解决方案1】:

感谢@ChrisWesseling 的建议。

根据支持部门的沟通,issue#25 已针对上述问题开放。现在它已被修复,并且根据他们的说法,pip 存储库也已更新为修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 2012-07-15
    • 2018-09-16
    • 1970-01-01
    • 2022-01-24
    • 2014-04-18
    • 1970-01-01
    • 2012-05-24
    相关资源
    最近更新 更多