2016-05-31 4 views
1

staticfilesを使用して、私のDjangoアプリケーションで静的ファイル(JS、CSS、画像など)を管理しています。これは正常に動作しますが、ユーザのブラウザが使用可能なときにdynamically serving pre-compressed sourcesを開始したいと考えています。runserverのDjango staticfilesとのコンテンツネゴシエーション

私はリンクされたチュートリアルを行っており、(Apache上では)これはうまく動作します。私は

<script src="/static/js/my-site"></script> 

を使用してファイルを含めることができるとgzipエンコーディングがサポートされている場合には、古いブラウザでmy-site.jsmy-site.js.gzをロードします。すばらしいです!しかし、これはrunserverを使って地方開発を破ります。もちろん、staticfilesのデフォルトビューでは、/js/my-site/js/my-site.js(または.gz)に変更する方法はわかりません。 runserverを有効にするには、コンテンツのネゴシエーションを中断する拡張子を指定する必要があります。

私はいつも.js(または.cssなど)をリクエストして、圧縮されたバージョンを透過的に提供できるように、Apacheを設定するより良い方法はありますか?または、拡張子を指定せずに要求されたリソースを見つける方法をDjangoに伝えることはできますか?私はこれをやろうとしている唯一の人だとは思わないでしょう...

+0

、私はを使用しているオンデマンドでこれらのファイルをコンパイルします。例えばDjango Compressor [代替の解決策]を試してください(http://stackoverflow.com/questions/9076752/how-to-force-apache-to-use-manually-pre-compressed-gz-file-of-css-and-js-files)。 )mod_rewriteを使用して私の人生のために私は実際にgzip'dファイルを提供することができません。多分 'mod_rewrite'のデバッグに関する別の質問が必要でしょうか? – Coderer

答えて

1

簡単な解決はありません。主にあなたがApache Webサーバー(afaik)用に設計されたものを使用しているためです。

私、私の意見3つの解決策があります。

  1. キープソースが別のディレクトリにある{JS、CSS}ファイル、開発中のソース・ディレクトリまたは圧縮されたものからそれらを提供することができます - 、シンプルな透明とすることができます。
  2. 圧縮ファイル.minで届くから遠くあなたの非圧縮と非難読化源を隠す{JS、CSS}エンディング - 。個別のディレクトリは必要ありませんが、あなたがApacheの中にソースを非表示にすることができます(mod_rewriteを)
  3. が独自に書きます小さなミドルウェアは、どのようなApacheを(それはいくつかの行を選択し、パスを書き換えることですシミュレートする、あなたもdiffere DEBUGコンフィグVARに応じて、NTの動作)
  4. 使用いくつかの動的なソリューション

(私はオプション4 :))参考のために

+0

これらのうちのいくつかは、この問題に完全に対処していません。私はgzipエンコーディングをサポートしていないブラウザから圧縮されていないスクリプトをロードするHTMLの中に*何か*が必要です。 OPの例は、Apacheから提供された場合にはうってつけです。 #1 /#4はこれを提供しません。 #3は機能しますが、ミドルウェアを書くことを学ぶことは今のところ優先事項ではありません。 #2については、私が上記のようにmod_rewriteに問題がありますが、おそらく長期的には最も有望な道でしょう。 – Coderer

+0

ブラウザが圧縮をサポートしていない場合、リクエストにヘッダーがないので、gzippedバージョンを強制的に使用しないでください。 – Jerzyk

+0

正確には#1と#4は完全な解決策ではありません。 HTMLが1つの指定されたリソースだけを要求していても、ヘッダーを調べて、どのバージョンを提供するかを決定することができます。 – Coderer

関連する問題