5

現在、django コンプレッサーと django ストレージを使用して、静的メディアを s3 から実行しています。私のファイルは次のとおりです。

ドキュメントによると、私のストレージは次のとおりです。

from django.core.files.storage import get_storage_class
from storages.backends.s3boto import S3BotoStorage

class CachedS3BotoStorage(S3BotoStorage):
    """
    S3 storage backend that saves the files locally, too.
    """
    def __init__(self, *args, **kwargs):
        super(CachedS3BotoStorage, self).__init__(*args, **kwargs)
        self.local_storage = get_storage_class(
            "compressor.storage.CompressorFileStorage")()

    def save(self, name, content):
        name = super(CachedS3BotoStorage, self).save(name, content)
        self.local_storage._save(name, content)
        return name

私の設定は次のとおりです。

# S3 Storage Section
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = DEFAULT_FILE_STORAGE
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME']
# AWS_S3_SECURE_URLS = False #turns off https for static files (necessary)

# Used to make sure that only changed files are uploaded with collectstatic
AWS_PRELOAD_METADATA = True

# Django compressor settings
STATICFILES_FINDERS += (
                        'compressor.finders.CompressorFinder',
                        )
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
COMPRESS_URL = STATIC_URL
COMPRESS_ROOT = STATIC_ROOT
COMPRESS_STORAGE = 'erp.storage.CachedS3BotoStorage'
STATICFILES_STORAGE = 'erp.storage.CachedS3BotoStorage'
AWS_LOCATION = 'static'
AWS_QUERYSTRING_EXPIRE = 7200

COMPRESS_JS_FILTERS = [
    'compressor.filters.template.TemplateFilter',
]

圧縮するメディアがたくさんあるため、dyno の再起動時に collectstatic を実行するのは遅くなるだけなので、オフライン圧縮を使用して manage.py compress コマンドを実行することにしました。

Django コンプレッサーは、すばらしいクエリ文字列を提供してくれますが、読み込まれない html が含まれています。すなわち

<link rel="stylesheet" href="site-url/static/CACHE/css/da0c0fa8dd51.css?Signature=Signature&amp;Expires=Expires&amp;AWSAccessKeyId=key 

2つのアンプ; アイテムがあってはなりません。むしろ安全にしたいのですが、設定で AWS_S3_SECURE_URLS = False も試しましたが、何かがおかしいと思われるような変更はないようです。

私はdjango 1.4を使用しているので、互換性のないものがあるかもしれません。

4

2 に答える 2

1

これらのクエリ文字列項目を防ぐために、settings.py で AWS_QUERYSTRING_AUTH = False を使用できます。

于 2013-11-07T15:18:13.850 に答える
-2

圧縮管理コマンドを使用する場合、ファイルのマニフェストをやり直す必要があることを確認できます。手動で行いましたが、もっと良い方法があると確信しています。かなり小さな問題ですが、私はこれに少し時間を費やしました。おそらく他の誰かの時間を節約するでしょう.

于 2012-06-07T11:47:59.600 に答える