1

私はs3でdjango-pipelineを使用しています。Javascript ファイルを結合して s3 バケットに保存することに成功しcollectstaticましたが、何らかの理由で圧縮されていません (ファイル、そのサイズ、およびコンテンツ エンコーディングを調べて確認しました)。それ以外の場合、生成された組み合わせscripts.jsで物事は正しく機能しています。

django-pipeline を使用するために行った変更は次のとおりです。

  1. pipelineインストール済みアプリに追加されました。
  2. 'pipeline.finders.PipelineFinder'に追加STATICFILES_FINDERS
  3. 以下に示すように、このクラスがドキュメントで定義されている場所に設定STATICFILES_STORAGE = 'mysite.custom_storages.S3PipelineManifestStorage'します。
  4. 以下に示すように設定PIPELINE_JSします。これは機能しますが、圧縮されません。
  5. PIPELINE_ENABLED = Trueそれ以来DEBUG = True、私はローカルで実行しています。
  6. PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.yuglify.YuglifyCompressor'これはデフォルトのはずですが。
  7. Yugliify Compressor を でインストールしましたnpm -g install yuglify
  8. PIPELINE_YUGLIFY_BINARY = '/usr/local/bin/yuglify'デフォルトの withが機能するenvはずですが。
  9. {% load pipeline %}and {% javascript 'scripts' %}which workを使用します。

もっと詳しく:

PIPELINE_JS = {
    'scripts': {
        'source_filenames': (
            'lib/jquery-1.11.1.min.js',
            ...            
        ),
        'output_filename': 'lib/scripts.js',
    }
}

class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage):
    location = settings.STATICFILES_LOCATION

前述のように、圧縮されていないだけでcollectstatic生成されます。scripts.jsそのコマンドの出力には次が含まれます。

Post-processed 'lib/scripts.js' as 'lib/scripts.js'

Django 1.8、django-pipeline 1.5.2、django-storages 1.1.8 を使用しています。

同様の質問:

4

1 に答える 1

3

欠落しているステップは、 も拡張することでした。またGZipMixin、親のリストの最初にある必要があります。

from pipeline.storage import GZIPMixin

class S3PipelineManifestStorage(GZIPMixin, PipelineMixin, ManifestFilesMixin, S3BotoStorage):
    location = settings.STATICFILES_LOCATION

各ファイルの .gz バージョンも生成されるようになりましcollectstaticたが、私のテンプレートはまだ .gz バージョンを参照していませんでした。

これに対処するために、著者は次のように述べています。

S3 で動作させるには、staticfiles ストレージ url メソッドを変更して .gz url (および、gzip をサポートしないクライアントを気にする場合は staticfiles/pipeline テンプレート タグ) を返す必要があります。また、これらのアセットを gzip されたものとして提供するために、s3 に適切なヘッダーを設定することを忘れないでください。

メソッドをオーバーライドする、彼がの場所で提供した例を採用しました。url

class S3PipelineManifestStorage(GZIPMixin, PipelineMixin, ManifestFilesMixin, S3BotoStorage):
    location = settings.STATICFILES_LOCATION

    def url(self, name, force=False):
        # Add *.css if you are compressing those as well.
        gzip_patterns = ("*.js",)
        url = super(GZIPMixin, self).url(name, force)
        if matches_patterns(name, gzip_patterns):
            return "{0}.gz".format(url)
        return url

Content-Encodingこれはまだヘッダーの設定を処理しません。

より簡単な代替手段は、gzipAWS_IS_GZIPPEDを実行し、適切なヘッダーを設定する S3Boto Storages オプションを使用することです。

ただし、gzip を使用しないクライアントをサポートするには、さらに多くのものが必要です。

S3 からの圧縮ファイルの提供に関する Amazon からのこれらの指示も役立ちます。

于 2015-07-29T01:33:44.140 に答える