web-dev-qa-db-ja.com

WhiteNoiseが有効になっていると「collectstatic」コマンドが失敗する

WhiteNoiseHerok の推奨に従って静的ファイルを提供しようとしています。開発環境でcollectstaticを実行すると、次のようになります。

Post-processing 'css/iconic/open-iconic-bootstrap.css' failed!

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/core/management/base.py", line 338, in execute
    output = self.handle(*args, **options)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/core/management/base.py", line 533, in handle
    return self.handle_noargs(**options)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/contrib/staticfiles/management/commands/collectstatic.py", line 168, in handle_noargs
    collected = self.collect()
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/contrib/staticfiles/management/commands/collectstatic.py", line 120, in collect
    raise processed
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/contrib/staticfiles/storage.py", line 242, in post_process
    content = pattern.sub(converter, content)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/contrib/staticfiles/storage.py", line 181, in converter
    hashed_url = self.url(unquote(joined_result), force=True)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/contrib/staticfiles/storage.py", line 128, in url
    hashed_name = self.stored_name(clean_name)
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/contrib/staticfiles/storage.py", line 277, in stored_name
    cache_name = self.clean_name(self.hashed_name(name))
  File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/Django/contrib/staticfiles/storage.py", line 91, in hashed_name
    (clean_name, self))
ValueError: The file 'css/fonts/open-iconic.eot' could not be found with <whitenoise.Django.GzipManifestStaticFilesStorage object at 0x7f57fc5b1550>.

設定でこの行をコメント化すると、静的コレクションコマンドは問題なく実行されます。

STATICFILES_STORAGE = 'whitenoise.Django.GzipManifestStaticFilesStorage'

ここで何が問題になっていて、どうすれば修正できますか?静的ファイル出力フォルダーを空にしてみました。特定の1つのファイルの処理を開始するまで、スムーズに実行されます。

24
Pieter

ここでの問題はcss/iconic/open-iconic-bootstrap.cssはファイルを参照しています、open-iconic.eot、これは予想される場所に存在しません。

そのストレージバックエンドでcollectstaticを実行すると、Djangoは、CSSファイル内のすべてのURLを書き換えて、新しい名前でファイルを参照できるようにします(例:css/iconic/open-iconic.8a7442ca6bed.eot。ファイルが見つからない場合は、そのエラーで停止します。

16
D. Evans

私はこれと同じ問題を抱えていて、設定ファイルからこの行を削除して修正しました、

STATICFILES_STORAGE = 'whitenoise.Django.GzipManifestStaticFilesStorage'

Herokuのドキュメントページからこの行を取得しました...

11
user772401

Herokuのドキュメントを信頼していたため、すべての.cssファイルが存在するときに.cssファイルが見つからないというエラーが発生しました。

STATIC_ROOT = 'staticfiles'

whiteNoiseのドキュメント:

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

修正は簡単ですが、Herokuがドキュメントを修正するまで(私はフィードバックを送信しました)、ソリューションが少なくともSOに表示されることを確認します。

10
Aur Saraf

ここでの問題は、

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

または

STATICFILES_STORAGE = 'Django.contrib.staticfiles.storage.ManifestStaticFilesStorage

runserverとは異なる方法でDjangoの静的ファイルストレージを使用します。いくつかの説明については、Django docsを参照してください: https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#Django.contrib.staticfiles.storage。 ManifestStaticFilesStorage.manifest_strict

参照されたマニフェストは、collectstaticを実行するとビルドされると思います。そうすることで、この問題が一時的に修正されますが、静的ファイルを変更した場合は、テストを実行する前にcollectstaticを実行したくないでしょう。別の解決策は、テストに対してこの設定を無効にし、本番環境で実行することです。

3
Jeff

同様の問題がありましたが、ひねりを加えました。

私はpythonanywhereにデプロイしました。デバッグをTrueにすると、アプリは正常に実行されます。しかし、ターンデバッグがFalseの場合、アプリは1行が要約であるというエラーでクラッシュします

_ValueError: Missing staticfiles manifest entry for 'favicons/favicon.ico'_

_STATIC_ROOT = 'staticfiles_からSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')に変更しました

staticfilesディレクトリを削除してから、_python manage.py collectstatic_を再実行します。

アプリは正常に実行されます

2
chidimo

私にとっての修正は、単に「静的」フォルダをトップディレクトリに追加することでした(myapp/staticがトリックを行いました)。 STATIC_URLを設定していて、そのディレクトリがまだ作成されていない場合、ホワイトノイズのある静的ファイルにそのディレクトリを使用していなくても、エラーがスローされます。

STATIC_URL = '/static/'
1
Colton Hicks

本番環境でのsettings.pyのホワイトノイズをコメントアウトすることで私にとってはうまくいきました。

#STATICFILES_STORAGE = 'whitenoise.Django.GzipManifestStaticFilesStorage'
#WHITENOISE_ROOT = os.path.join(BASE_DIR, 'staticfiles')
0

whitenoise.Django.GzipManifestStaticFilesStorageエイリアスが削除されました。代わりに、正しいインポートパスを使用する必要があります:whitenoise.storage.CompressedManifestStaticFilesStorage

ドキュメントのとおり here

0
merc1er

静的ファイルに関連するすべての設定を確認してください。特に、パスが正しい場所を指していることを確認してください。個人的にSTATICFILES_DIRSが間違ったパスを指しています。

0
Karuhanga

私の場合、別の解決策がありました。 Heroku構成では、次の設定がありました。

DISABLE_COLLECTSTATIC = 0

これにより、Herokuマスターにプッシュすることで、Herokuが静的に自動的に収集されるはずですが、そうではありません!。

私がしたことはこの設定を削除することでした

Heroku > my_app > settings > config vars

その後、Herokuは自動的に静的ファイルを収集し、問題は消えました。

0
Bartek

私はこの問題に一日中取り組んできました。問題は、staticfilesディレクトリがgitにチェックインされていないことでした。このディレクトリ内にダミーファイルを作成してチェックインしましたが、すべて問題ありませんでした。これは、ホワイトノイズのドキュメントのどこかに記載されていると思います。

0
ravioli

他の皆と同じように、私はこの問題に独自の修正をしました... _styles.css_ファイルに構文が間違っているurl()があることがわかりました。

変更したら:

background-image: url( '../images/futura_front_blank_medium.jpg' );

background-image: url('../images/futura_front_blank_medium.jpg');

(微妙な違いに注意してください-文字列の両側のスペースを削除しました)

次に_python manage.py collectstatic_は正常に動作し、そのエラーは発生しませんでした。

0
David Maness