Django assets - herokaijp/devcenter GitHub Wiki

もし、Heroku上のPythonに関して質問がある場合は、[Herokuのフォーラム上のPython](https://discussion.heroku.com/category/python)の中で議論することを検討してみてください。HerokuとコミュニティベースであるPythonの両方の専門家がそこにはいます。

静的なアセットに関するDjangoの設定は、調整しデバッグするのが少し難しいかもしれません。

しかし、以下の設定をsettings.pyに追加すると、すべてあなたが思うような形で正確に動いてくれるでしょう :

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に追加します。

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を使ってみたいと思うかもしれません。

自動であるCollectstatic

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.

一度有効になったら、あなたのアプリケーションのデプロイで、最新の実行時の設定のセットが環境変数として利用可能な状態になります。

Collectstaticの無効化

時々、Herokuにcollectstaticを実行してもらいたくないことがあるかもしれません。同様にuser-env-compileを有効にすることで、collectstaticを無効化することができます。

:::term
$ heroku labs:enable user-env-compile
$ heroku config:set DISABLE_COLLECTSTATIC=1
⚠️ **GitHub.com Fallback** ⚠️