带有Django存储和S3的collectstatic上的MemcachedError
我在Heroku上部署了一个简单的Django应用程序。当我运行带有Django存储和S3的collectstatic上的MemcachedError,django,heroku,amazon-s3,django-storage,libmemcached,Django,Heroku,Amazon S3,Django Storage,Libmemcached,我在Heroku上部署了一个简单的Django应用程序。当我运行collectstatic将静态文件上载到S3时,出现以下错误: Traceback (most recent call last): File "appname/manage.py", line 11, in execute_from_command_line(sys.argv) File "/app/.heroku/python/lib/python2.7/site-packages/django/core/m
collectstatic
将静态文件上载到S3时,出现以下错误:
Traceback (most recent call last):
File "appname/manage.py", line 11, in
execute_from_command_line(sys.argv)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
utility.execute()
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
self.execute(*args, **options.__dict__)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
output = self.handle(*args, **options)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 415, in handle
return self.handle_noargs(**options)
File "/app/.heroku/python/lib/python2.7/site-packages/collectfast/management/commands/collectstatic.py", line 135, in handle_noargs
collected = self.collect()
File "/app/.heroku/python/lib/python2.7/site-packages/collectfast/management/commands/collectstatic.py", line 33, in collect
ret = super(Command, self).collect(*args, **kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 111, in collect
handler(path, prefixed_path, storage)
File "/app/.heroku/python/lib/python2.7/site-packages/collectfast/management/commands/collectstatic.py", line 92, in copy_file
self.destroy_lookup(prefixed_path)
File "/app/.heroku/python/lib/python2.7/site-packages/collectfast/management/commands/collectstatic.py", line 61, in destroy_lookup
cache.delete(self.get_cache_key(path))
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/cache/backends/memcached.py", line 86, in delete
self._cache.delete(key)
_pylibmc.MemcachedError: error 47 from memcached_delete(:1:collectfast_asset_dc44a7965f7): SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY, host: 127.0.0.1:11211 -> libmemcached/connect.cc:592
回溯(最近一次呼叫最后一次):
文件“appname/manage.py”,第11行,在
从命令行(sys.argv)执行命令
文件“/app/.heroku/python/lib/python2.7/site packages/django/core/management/\uu init\uu.py”,第399行,从命令行执行
utility.execute()
文件“/app/.heroku/python/lib/python2.7/site packages/django/core/management/_init__.py”,第392行,在execute中
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“/app/.heroku/python/lib/python2.7/site packages/django/core/management/base.py”,第242行,在运行时从
self.execute(*args,**选项._dict__;
文件“/app/.heroku/python/lib/python2.7/site packages/django/core/management/base.py”,执行中第285行
输出=self.handle(*args,**选项)
handle中的文件“/app/.heroku/python/lib/python2.7/site packages/django/core/management/base.py”,第415行
返回self.handle\u noargs(**选项)
文件“/app/.heroku/python/lib/python2.7/site packages/collectfast/management/commands/collectstatic.py”,第135行,在handle_noargs中
collected=self.collect()
collect中的文件“/app/.heroku/python/lib/python2.7/site packages/collectfast/management/commands/collectstatic.py”,第33行
ret=super(命令,self).collect(*args,**kwargs)
文件“/app/.heroku/python/lib/python2.7/site packages/django/contrib/staticfiles/management/commands/collectstatic.py”,第111行,在collect中
处理程序(路径、前缀路径、存储)
文件“/app/.heroku/python/lib/python2.7/site packages/collectfast/management/commands/collectstatic.py”,第92行,在copy_文件中
self.destroy_查找(前缀为_路径)
文件“/app/.heroku/python/lib/python2.7/site packages/collectfast/management/commands/collectstatic.py”,第61行,在销毁查找中
cache.delete(self.get_cache_key(path))
文件“/app/.heroku/python/lib/python2.7/site packages/django/core/cache/backends/memcached.py”,删除中第86行
self.\u cache.delete(键)
_pylibmc.MemcachedError:memcached_delete(:1:collectfast_asset_dc44a7965f7)中的错误47:服务器已失败并在定时重试之前被禁用,主机:127.0.0.1:11211->libmemcached/connect.cc:592
heroku上设置了以下环境变量:
BUILDPACK_URL:
DATABASE_URL:
DJANGO_AWS_ACCESS_KEY_ID:
DJANGO_AWS_SECRET_ACCESS_KEY:
DJANGO_AWS_STORAGE_BUCKET_NAME:
DJANGO_CONFIGURATION:
DJANGO_SECRET_KEY:
HEROKU_POSTGRESQL_CRIMSON_URL:
MEMCACHIER_PASSWORD:
MEMCACHIER_SERVERS:
MEMCACHIER_USERNAME:
PGBACKUPS_URL:
SENDGRID_PASSWORD:
SENDGRID_USERNAME:
BUILDPACK\u URL:
数据库URL:
DJANGO\u AWS\u访问\u密钥\u ID:
DJANGO_AWS_机密_访问_密钥:
DJANGO_AWS_存储_桶_名称:
DJANGO_配置:
DJANGO_密钥:
HEROKU_POSTGRESQL_CRIMSON_URL:
MEMCACHIER_密码:
MEMCACHIER_服务器:
MEMCACHIER_用户名:
PGU URL:
SENDGRID\u密码:
SENDGRID\u用户名:
我已经为此挣扎了几天。昨天,我意识到其中一个env变量有一个拼写错误的副本。删除拼写错误的env变量后,collectstatic
命令工作正常,文件被上传到S3。现在我正在使用另一个应用程序,无法使其工作
已存在同名的空S3存储桶。我尝试了用户特定和帐户范围的AWS凭据,但都没有成功。我遇到了同样的问题。我已经回答了有关问题 为了完整起见,以下是解决方案: 首先将django pylibmc sasl==0.2.4添加到requirements.txt 然后在settings.py中,将文件末尾的“缓存”部分替换为:
########## CACHING
os.environ['MEMCACHE_SERVERS'] = os.environ.get('MEMCACHIER_SERVERS', '')
os.environ['MEMCACHE_USERNAME'] = os.environ.get('MEMCACHIER_USERNAME', '')
os.environ['MEMCACHE_PASSWORD'] = os.environ.get('MEMCACHIER_PASSWORD', '')
CACHES = {
'default': {
'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
'LOCATION': os.environ.get('MEMCACHIER_SERVERS', ''),
'TIMEOUT': 500,
'BINARY': True,
'OPTIONS': { 'tcp_nodelay': True }
}
}
########## END CACHING
它现在应该可以在Heroku上正常工作了