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つのファイルの処理を開始するまで、スムーズに実行されます。
ここでの問題はcss/iconic/open-iconic-bootstrap.css
はファイルを参照しています、open-iconic.eot
、これは予想される場所に存在しません。
そのストレージバックエンドでcollectstatic
を実行すると、Djangoは、CSSファイル内のすべてのURLを書き換えて、新しい名前でファイルを参照できるようにします(例:css/iconic/open-iconic.8a7442ca6bed.eot
。ファイルが見つからない場合は、そのエラーで停止します。
私はこれと同じ問題を抱えていて、設定ファイルからこの行を削除して修正しました、
STATICFILES_STORAGE = 'whitenoise.Django.GzipManifestStaticFilesStorage'
Herokuのドキュメントページからこの行を取得しました...
Herokuのドキュメントを信頼していたため、すべての.cssファイルが存在するときに.cssファイルが見つからないというエラーが発生しました。
STATIC_ROOT = 'staticfiles'
whiteNoiseのドキュメント:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
修正は簡単ですが、Herokuがドキュメントを修正するまで(私はフィードバックを送信しました)、ソリューションが少なくともSOに表示されることを確認します。
ここでの問題は、
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を実行したくないでしょう。別の解決策は、テストに対してこの設定を無効にし、本番環境で実行することです。
同様の問題がありましたが、ひねりを加えました。
私は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
_を再実行します。
アプリは正常に実行されます
私にとっての修正は、単に「静的」フォルダをトップディレクトリに追加することでした(myapp/staticがトリックを行いました)。 STATIC_URLを設定していて、そのディレクトリがまだ作成されていない場合、ホワイトノイズのある静的ファイルにそのディレクトリを使用していなくても、エラーがスローされます。
STATIC_URL = '/static/'
本番環境でのsettings.pyのホワイトノイズをコメントアウトすることで私にとってはうまくいきました。
#STATICFILES_STORAGE = 'whitenoise.Django.GzipManifestStaticFilesStorage'
#WHITENOISE_ROOT = os.path.join(BASE_DIR, 'staticfiles')
whitenoise.Django.GzipManifestStaticFilesStorage
エイリアスが削除されました。代わりに、正しいインポートパスを使用する必要があります:whitenoise.storage.CompressedManifestStaticFilesStorage
。
ドキュメントのとおり here 。
静的ファイルに関連するすべての設定を確認してください。特に、パスが正しい場所を指していることを確認してください。個人的にSTATICFILES_DIRS
が間違ったパスを指しています。
私の場合、別の解決策がありました。 Heroku構成では、次の設定がありました。
DISABLE_COLLECTSTATIC = 0
これにより、Herokuマスターにプッシュすることで、Herokuが静的に自動的に収集されるはずですが、そうではありません!。
私がしたことはこの設定を削除することでした
Heroku > my_app > settings > config vars
その後、Herokuは自動的に静的ファイルを収集し、問題は消えました。
私はこの問題に一日中取り組んできました。問題は、staticfiles
ディレクトリがgitにチェックインされていないことでした。このディレクトリ内にダミーファイルを作成してチェックインしましたが、すべて問題ありませんでした。これは、ホワイトノイズのドキュメントのどこかに記載されていると思います。
他の皆と同じように、私はこの問題に独自の修正をしました... _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
_は正常に動作し、そのエラーは発生しませんでした。