これまで、私は Pyramid を使用して、ドキュメントで指定されているように、python パッケージ内のフォルダーから静的アセットを提供してきました。
config.add_static_view('static', 'myapp:static')
次のようにテンプレートからロードします。
<script type="text/javascript" src="{{ request.application_url }}/static/js/jquery-1.7.1.min.js"></script>
ただし、Chrome が次のような警告を吐き出すことに気付きました。
Resource interpreted as Stylesheet but transferred with MIME type apache/2.2.14: "http://mydomain.com/static/js/jquery-1.7.1.min.js"
また
Resource interpreted as Stylesheet but transferred with MIME type text/plain: "http://mydomain.com/static/js/jquery-1.7.1.min.js"
これはハード リフレッシュで発生し、ロードされた 3 ~ 4 個のランダムリソースが<head>
間違った Content-Type ヘッダーで提供されているようです (Pyramid docs によると、ヘッダーはファイル拡張子によって決定されます)。
間違ったヘッダーがどのように設定されているかについて、私が推測できたパターンはありません。場合によってはtext/plain
、javascript/CSS ファイルの場合もあれば、次のようなパスの場合もあります/static/js/something.js
(このパスはリクエスト URL とはまったく関係ありません) 。また、上記のようにServer
ヘッダーの値の場合もありapache/2.2.14
ます。
CSS が不適切な Content-Type で返されるとレンダリングされず、ページ全体が壊れてしまうため、これは大きな問題です。Apache でリクエストをキャッチし/static
、それを使用して静的アセットを提供することでこれを解決しましたが、他のすべてのリクエストは Pyramid を通過させます。Chrome で不適切な MIME タイプの警告が表示されなくなりました。しかし、誰かがこの問題に遭遇したのか、それは Pyramid のバグなのか、それとも私が何か他のことをしているのだろうかと思っていました。
編集:アプリのデプロイ方法の仕様を提供するのを忘れていました。運用サーバーは Apache 2.2 を実行し、アプリは mod_wsgi で実行されます。私が従ったプロセスは、このチュートリアルで説明されているほぼそのままです: http://docs.pylonsproject.org/projects/pyramid/en/1.0-branch/tutorials/modwsgi/index.html . 重要: この問題は、mod_wsgi を介して Apache で実行している場合にのみ発生します。アプリをウェイトレスでローカルに実行すると、Content-Type ヘッダーは常に正しくなります。