2014-02-27 49 views
2

我已經在Heroku上部署了一個裸機Django應用程序。當我運行collectstatic上傳的靜態文件到S3,我得到以下錯誤:MemcachedError與Django存儲和S3 collectstatic

 
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: 

我一直在爲此而努力了幾:

 
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 

以下ENV變量在Heroku上設置天。昨天,我意識到其中一個env變量有拼寫錯誤的副本。刪除拼寫錯誤的env變量後,collectstatic命令完美工作,文件上載到S3。現在我正在處理另一個應用程序,無法啓動它。

已存在具有相同名稱的空S3存儲桶。我已經嘗試了用戶特定的和帳戶範圍的AWS憑證,但都沒有成功。

回答

0

我有同樣的問題。我已在相關的GitHub issue上回答。

爲了完整這裏的解決方案:

首先添加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上正常工作。

相關問題