'collectstatic' command fails when WhiteNoise is enabled

旧巷老猫 提交于 2019-11-28 06:50:46

The problem here is that css/iconic/open-iconic-bootstrap.css is referencing a file, open-iconic.eot, which doesn't exist in the expected location.

When you run collectstatic with that storage backend Django attempts to rewrite all the URLs in your CSS files so they reference the files by their new names e.g, css/iconic/open-iconic.8a7442ca6bed.eot. If it can't find the file it stops with that error.

I just had this same issue and fixed it by removing this line from my settings file,

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

I got this line from the Heroku documentation page...

I've had this error claiming a missing .css file when all my .css files existed, because I trusted Heroku documentation:

STATIC_ROOT = 'staticfiles'

over WhiteNoise documentation:

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

The fix is trivial, but until Heroku fix their docs (I submitted feedback), lets make sure the solution at least appears in SO.

The issue here is that using

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

or

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

uses Django's static file storage in a different way than runserver does. See the Django docs for some explanation: https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#django.contrib.staticfiles.storage.ManifestStaticFilesStorage.manifest_strict

I believe the referenced manifest gets built when you run collectstatic, so doing so should fix this problem temporarily, but you likely don't want to run collectstatic before every test run if you have modified any static files. Another solution would be to disable this setting for your tests, and just run it in production.

For me the fix was simply adding a 'static' folder to the top directory (myapp/static did the trick). If you are setting the STATIC_URL but don't have that directory already created, it will throw an error, even though you aren't using that directory for your static files with whitenoise.

STATIC_URL = '/static/'

I had similar problem, but with a twist.

I deployed on pythonanywhere. If I turn debug True, app runs fine. But if a turn debug False, app crashes with a error that with one line being the summary

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

I changed from STATIC_ROOT = 'staticfiles to STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

Deleted staticfiles directory, then rerun python manage.py collectstatic.

Now app runs fine

It worked for me by commenting out the whitenoise in settings.py in production.

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

I've been dealing with this issue all day. It turns out the problem was the staticfiles directory was not checked in to git. I created a dummy file inside this directory, checked it in and everything was fine. This was mentioned somewhere in the Whitenoise documentation too, I believe.

Be sure to check all your settings related to static files, especially making sure the paths are pointing to the right locations. I personally had one of my STATICFILES_DIRS pointing to a wrong path.

Much like everyone else, I had a unique fix to this problem... turns out I had a url() in my styles.css file with bad syntax.

Once I changed:

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

to

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

(notice the subtle difference -- I removed the spaces on either side of the string)

then python manage.py collectstatic worked fine and I didn't get that error.

The whitenoise.django.GzipManifestStaticFilesStorage alias has now been removed. Instead you should use the correct import path: whitenoise.storage.CompressedManifestStaticFilesStorage.

As per the doc here.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!