2015-10-04 54 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"