启用WhiteNoise时,“collectstatic”命令失败

2024-04-20 09:16:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图根据Heroku的建议通过WhiteNoise来提供静态文件。当我在开发环境中运行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'

这里出了什么问题,我该怎么解决?我已经尝试清空我的静态文件输出文件夹。它运行平稳,直到开始处理一个特定的文件。


Tags: djangonameinpyselfhomelibpackages
3条回答

这里的问题是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文档页面得到这一行的。。。

当我的所有.css文件都存在时,我声称丢失了一个.css文件,因为我信任Heroku文档:

STATIC_ROOT = 'staticfiles'

白噪声文件:

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

修复是微不足道的,但是在Heroku修复他们的文档(我提交了反馈)之前,让我们确保解决方案至少出现在SO中。

相关问题 更多 >