0

HerokuにデプロイされたDjangoアプリで奇妙な問題が発生しています。AmazonS3バケットでdjango- herokuappを使用し、キャッシュにdjango-heroku-memcacheifyを使用しています。私の制作設定は次のようになります。

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

どういうわけか、ファイルの名前がリクエストで 2 回指定されています。なぜこれが起こっているのかわかりません。f8e3b9a96f8f.cssという名前のファイルは、 Amazon バケットのフォルダーに実際に存在しCACHE/cssます。

手がかりはありますか?

4

1 に答える 1

1

まあ、誰かが同じ問題に遭遇した場合に備えて、次のように変更するだけですべてが正常に機能STATICFILES_STORAGEするようになりました。settings.py

STATICFILES_STORAGE = "storages.backends.s3boto.S3BotoStorage"
于 2016-02-25T23:28:39.327 に答える