2016-08-09 1 views
2

私はsettings.pyために、次の例に出くわした実稼働環境で静的ファイルをDjangoで提供しないのはなぜですか?</p> <pre><code>if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) </code></pre> <p>と言われました:

静的()ヘルパー関数は、開発のためではなく 本番環境での使用に適しています。 プロダクション環境でDjangoで静的ファイルを提供しないでください。

誰もがなぜより良い方法を使用するか説明できますか?

編集:

Apacheでstatic()を使用できますか?

+1

これらのヒントを参照してください。[こちら](http://www.tech-wanderings.com/quick-tips-django-and-heroku-static-files-and-multiple-environments) – nbryans

+0

@nbryansヒントは面白いですが、しかし私は一般的に私の質問への答えを見ることができません。また、単に'manage.py runserver 'で静的ファイルを使用しないように指示します。なぜ私はApacheで使用すべきでないのか理解したいのですが? – user2853437

+0

WSGIサーバーから静的ファイルを提供する場合は、[WhiteNoise](http://whitenoise.evans.io/en/stable/)を使用することをお勧めします。セットアップで許可されている場合、WhiteNoiseはWebサーバーを使用して、 'sendfile()'システムコールを使用して実際のファイルコンテンツをディスクから直接プッシュします。 'static()'ヘルパーは、ファイルをPythonメモリにロードし、WSGIハンドラを介して送信します。可能であれば、特に大きなファイルの場合は、これらの余分なレイヤーを避ける必要があります。 – knbk

答えて

4

Djangoは、静的ファイルを処理するのに非常に高速で効率的ではありません。 Djangoのドキュメントを引用すると、「この方法は非常に効率が悪く、おそらく安全性が低いため、生産には適していません」静的コンテンツを提供するために特別に設計されたツールを使用する方がよいでしょう。 Djangoのドキュメントで静的サーバを設定する方法については、deploying static filesに詳しい説明があります。

基本的な考え方は、静的ファイルの提供にDjangoを不必要に関与させないことです。あなたのコメントからあなたの生産サーバーを聞かせて、Apacheのように聞こえるように、静的ファイルを直接提供してください。 httpd.confファイルを編集してapacheに静的ファイルhttps://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/#serving-filesを提供させる手順は次のとおりです。 djangoのstatic()関数はまったく関わってはいけません。 djangoでcollectstatic管理コマンドを使用して、すべての静的ファイルをSTATIC_ROOTにコピーして、Apacheが見つけることができるようにしてください。

関連する問題