Django assets - herokaijp/devcenter GitHub Wiki
静的なアセットに関するDjangoの設定は、調整しデバッグするのが少し難しいかもしれません。
しかし、以下の設定をsettings.py
に追加すると、すべてあなたが思うような形で正確に動いてくれるでしょう :
:::python
# Static asset configuration
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(PROJECT_PATH, 'static'),
)
プロダクション環境で静的なファイルを提供するためには、dj-staticライブラリを使う事ができます。
:::term
$ pip install dj-static
...
$ pip freeze > requirements.txt
プロダクション環境で静的なファイルを提供するためには、次に、以下のコードをwsgi.py
に追加します。
:::python
from django.core.wsgi import get_wsgi_application
from dj_static import Cling
application = Cling(get_wsgi_application())
すると、あなたのアプリケーションはプロダクション環境でGunicornから直接静的なアセットを提供するようになります。これは、ほとんどのアプリケーションにとって完全に十分なものとなるでしょう、しかし一流のアプリケションはDjango-StoragesとCDNを使ってみたいと思うかもしれません。
DjangoアプリケーションがHerokuでデプロイされると、collectstatic
が適切に設定されている場合に自動的に実行されます。
私たちは、以下のコードをあなたのコードベースに対して実行することで、Collectstaticが設定されているかどうかを判断しています。
:::term
$ python manage.py collectstatic --dry-run --noinput
もし必要とされる設定が無く、このコマンドが失敗するようならば、collectstaticのサポートはあなたのアプリケーションには適応されません。
なぜあなたのアプリケーションのcolletstaticが設定されないのかをもっと知るためには、heroku run
を使う事ができます :
:::term
$ heroku run python manage.py collectstatic --noinput
...
django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting.
通常、あなたのアプリケーションがコンパイルされている時には、アプリケーションの設定は有効ではありません。これが問題に成ることがあります。例えば、Django-StoragesでS3にファイルをアップロードするために、collectstatic
使う事があります。
あなたのアプリケーションがビルドの中にある実行時の設定にアクセスする必要がある場合、user-env-compileを使ってこれを有効にすることができます :
:::term
$ heroku labs:enable user-env-compile
-----> Enabling user-env-compile for myapp... done
WARNING: This feature is experimental and may change or be removed without notice.
一度有効になったら、あなたのアプリケーションのデプロイで、最新の実行時の設定のセットが環境変数として利用可能な状態になります。
時々、Herokuにcollectstatic
を実行してもらいたくないことがあるかもしれません。同様にuser-env-compileを有効にすることで、collectstaticを無効化することができます。
:::term
$ heroku labs:enable user-env-compile
$ heroku config:set DISABLE_COLLECTSTATIC=1