2015-10-04 45 views
0

我有我的的Django应用程序一个奇怪的问题,部署在Heroku上。我正在使用django-herokuappAmazonS3存储区和django-heroku-memcacheify用于缓存。我的产品设置如下:重复文件名的Django缓存的静态资产的Heroku + S3

from .base import * 
import dj_database_url 
import os 
from memcacheify import memcacheify 


INSTALLED_APPS += (
    'herokuapp', 
) 

# Heroku platform settings. 
HEROKU_APP_NAME = "myapp" 
HEROKU_BUILDPACK_URL = "https://github.com/heroku/heroku-buildpack-python.git" 
SITE_DOMAIN = "myapp.herokuapp.com" 

# Parse database configuration from $DATABASE_URL 
DATABASES['default'] = dj_database_url.config() 
env = os.environ.copy() 
SECRET_KEY = env['SECRET_KEY'] 

# Honor the 'X-Forwarded-Proto' header for request.is_secure() 
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 

# Allow all host headers 
ALLOWED_HOSTS = ['*'] 

# SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = False 
TEMPLATE_DEBUG = False 

BASE_DIR = os.path.abspath(os.path.dirname(__name__)) 
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'), 
) 

# Use Amazon S3 for storage for uploaded media files. 
DEFAULT_FILE_STORAGE = "storages.backends.s3boto.S3BotoStorage" 

# Use Amazon S3 for static files storage. 
STATICFILES_STORAGE = "require_s3.storage.OptimizedCachedStaticFilesStorage" 
STATIC_ROOT = 'staticfiles' 

# Amazon S3 settings. 
AWS_ACCESS_KEY_ID = env['AWS_ACCESS_KEY_ID'] 
AWS_SECRET_ACCESS_KEY = env['AWS_SECRET_ACCESS_KEY'] 
AWS_STORAGE_BUCKET_NAME = env['AWS_STORAGE_BUCKET_NAME'] 
AWS_AUTO_CREATE_BUCKET = True 
AWS_HEADERS = { 
    "Cache-Control": "public, max-age=86400", 
} 
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME 
STATIC_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN 
COMPRESS_URL = STATIC_URL 
MEDIA_URL = "https://%s/media/" % AWS_S3_CUSTOM_DOMAIN 

AWS_S3_FILE_OVERWRITE = True 
AWS_QUERYSTRING_AUTH = False 
AWS_S3_SECURE_URLS = True 
AWS_REDUCED_REDUNDANCY = True 
AWS_PRELOAD_METADATA = True 
AWS_IS_GZIPPED = False 

CACHES = memcacheify() 

# Compress static files offline 
COMPRESS_CSS_FILTERS = [ 
    'compressor.filters.css_default.CssAbsoluteFilter', 
    'compressor.filters.cssmin.CSSMinFilter', 
] 
COMPRESS_CSS_HASHING_METHOD = 'content' 
COMPRESS_ROOT = STATIC_ROOT 
COMPRESS_STORAGE = STATICFILES_STORAGE 
COMPRESS_OFFLINE = True 
COMPRESS_ENABLED = True 

LOGGING = { 
    "version": 1, 
    "disable_existing_loggers": False, 
    "handlers": { 
     "console": { 
      "level": "INFO", 
      "class": "logging.StreamHandler", 
     }, 
    }, 
    "loggers": { 
     "django": { 
      "handlers": ["console"], 
     } 
    } 
} 

WAGTAILSEARCH_BACKENDS = { 
    'default': { 
     'BACKEND': 'wagtail.wagtailsearch.backends.db', 
     'AUTO_UPDATE': True, 
    } 
} 

# Use the cached template loader 
TEMPLATE_LOADERS = (
    ('django.template.loaders.cached.Loader', (
     'django.template.loaders.filesystem.Loader', 
     'django.template.loaders.app_directories.Loader', 
    )), 
) 


MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware', 
) + MIDDLEWARE_CLASSES + (
    'django.middleware.cache.FetchFromCacheMiddleware', 
) 

# Excluding logged in (admin) requests 
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True 

应用程序部署工作正常,静态生成并传输到存储区没有任何问题。但加载应用程序的所有服务静态缓存文件(CSS + JS)的请求时的样子:

https://my-bucket-name.s3.amazonaws.com/CACHE/css/f8e3b9a96f8f.f8e3b9a96f8f.css 

不知怎的,在询问中指定两次文件的名称。我不知道为什么会发生这种情况。名为f8e3b9a96f8f.css的文件的确存在于亚马逊桶的CACHE/css文件夹中。

任何线索有人吗?

回答

1

哦,万一有人跑进了同样的问题,我设法把一切工作正常,只是通过改变STATICFILES_STORAGEsettings.py,如:

STATICFILES_STORAGE = "storages.backends.s3boto.S3BotoStorage"