Djangoプロジェクトをlocalhostのgunicornで実行したい。gunicornをインストールして統合した。実行すると:
python manage.py run_gunicorn
動作しますが、静的ファイル(cssおよびjs)はありません
Settings.pyでdebugとtemplate_debugを無効にしました(falseにしました)が、それでも同じです。何か不足していますか?
私は次のような静的関数を呼び出します:
{{ STATIC_URL }}css/etc....
developmentモードで、ローカル開発に他のサーバーを使用している場合これをURLに追加します.py
from Django.contrib.staticfiles.urls import staticfiles_urlpatterns
# ... the rest of your URLconf goes here ...
urlpatterns += staticfiles_urlpatterns()
詳細 こちら
productionにいるときは、決してgunicornを前面に配置することはありません。代わりに、リクエストをgunicornワーカーのプールにディスパッチし、静的ファイルも提供するnginxのようなサーバーを使用します。
こちら をご覧ください
ホワイトノイズ
Post v4.0
http://whitenoise.evans.io/en/stable/changelog.html#v4-
Django(wsgi.pyの編集を伴う)のWSGI統合オプションは削除されました。代わりに、settings.pyのミドルウェアリストにWhiteNoiseを追加し、wsgiからWhiteNoiseへの参照を削除する必要があります。 py。詳細については、ドキュメントを参照してください(純粋なWSGI統合は、Django以外のアプリでも引き続き使用できます)。
v4.0より前
Herokuはこの方法を次の場所で推奨しています: https://devcenter.heroku.com/articles/Django-assets :
これで、アプリケーションは本番環境のGunicornから静的アセットを直接提供します。ほとんどのアプリケーションにはこれで十分ですが、最上位のアプリケーションでは、Django-StoragesでCDNを使用することを検討する必要があります。
でインストール:
pip install whitenoise
pip freeze > requirements.txt
wsgi.py
:
import os
from Django.core.wsgi import get_wsgi_application
from whitenoise.Django import DjangoWhiteNoise
os.environ.setdefault("Django_SETTINGS_MODULE", "free_books.settings")
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
テスト済みDjango 1.9。
Gunicornはpython "application"自体を提供するために使用する必要がありますが、静的ファイルは静的ファイルサーバー(Nginxなど)によって提供されます。
ここに良いガイドがあります: http://honza.ca/2011/05/deploying-Django-with-nginx-and-gunicorn
これは私の構成の1つからの抜粋です。
upstream app_server_djangoapp {
server localhost:8000 fail_timeout=0;
}
server {
listen < server port goes here >;
server_name < server name goes here >;
access_log /var/log/nginx/guni-access.log;
error_log /var/log/nginx/guni-error.log info;
keepalive_timeout 5;
root < application root directory goes here >;
location /static {
autoindex on;
alias < static folder directory goes here >;
}
location /media {
autoindex on;
alias < user uploaded media file directory goes here >;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_Host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://app_server_djangoapp;
break;
}
}
}
いくつかのメモ:
最後に:gunicornから静的ファイルを提供することは可能ですが(デバッグ専用の静的ファイル提供ビューを有効にすることで)、それは実稼働環境では悪い習慣と見なされます。
開発環境(gunicornを使用)でこれを使用しました。
from Django.conf import settings
from Django.contrib.staticfiles.handlers import StaticFilesHandler
from Django.core.wsgi import get_wsgi_application
if settings.DEBUG:
application = StaticFilesHandler(get_wsgi_application())
else:
application = get_wsgi_application()
そして、gunicorn myapp.wsgi
を実行します。これはsimilarと @ rantanplan's answer で動作しますが、静的ファイルを実行しているときはミドルウェアを実行しません。
Django 1.3以降、DEBUGモードで静的ファイルを処理するDjango/conf/urls/static.pyがあります。
from Django.conf import settings
from Django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
続きを読む https://docs.djangoproject.com/en/2.0/howto/static-files/#serving-static-files-during-development