2

Heroku Django プロジェクト テンプレートを使用して、Heroku にデプロイされた Django プロジェクトをセットアップしました。Heroku のテンプレートはwhitenoiseを使用して、プロジェクト ルートにある /static/ ディレクトリに静的ファイルを収集します。

これは、私の運用環境に最適です。新しいファイルをサーバーにプッシュするたびに、Heroku は「manage.py collectstatic」を実行します。ただし、ローカルで開発する場合は面倒です。静的ファイル (css など) を変更するたびに、開発サーバーで変更を確認する前に「python manage.py collectstatic」を手動で実行する必要があります。

ローカルの静的ファイルへの変更を確認するたびに「python manage.py collectstatic」を実行する必要がないように、ローカル マシンでホワイトノイズを無効にする簡単な方法はありますか?

別の「development_settings.py」ファイルを作成し、そのファイル内の whitenoise への参照をすべて削除しようとしましたが、wsgi.py で whitenoise がまだ参照されていてエラーが発生するため、うまくいきません。

4

4 に答える 4

0

開発サーバーでホワイトノイズを無効にする簡単な方法は見つかりませんでしたが、このプロセス全体を簡単にするための便利な回避策を見つけました。

collectstatic を実行し、同時にサーバーを起動する新しいコマンド エイリアスを .bash_profile ファイル (開発用の仮想環境を使用している場合は bin/activate) に追加します。

alias launch='python manage.py collectstatic --noinput; foreman start'
于 2015-08-10T04:19:56.673 に答える
0

現在のバージョンの whitenoise は、静的ファイルの変更を自動的に取得します。runserverただし、すべての静的ファイルを反復処理するため、起動がかなり遅くなる可能性があります。ランサーバーでホワイトノイズを無効にすることでこれを修正しました。今、私は次のようにwsgi.py見えます:

import os
import sys

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "...")

application = get_wsgi_application()

# guess whether this is a runserver invocation with staticfiles
has_staticfiles = False
if 'runserver' in sys.argv:
    from django.conf import settings
    import inspect
    if settings.DEBUG:
        has_staticfiles = any(
            "django/contrib/staticfiles/management/commands/runserver"
            in x[1]
            for x in inspect.stack())

if has_staticfiles:
    print('runserver with staticfiles detected, skipping whitenoise')
else:
    # Do not use whitenoise with runserver, as it's slow
    from whitenoise.django import DjangoWhiteNoise
    application = DjangoWhiteNoise(application)
于 2015-12-10T15:42:30.677 に答える