我正按照WhiteNoise的建议,尝试通过Heroku提供静态文件。当我在开发环境中运行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'
这里出了什么问题,我该如何解决?我已经尝试清空我的静态文件输出文件夹。它运行顺利,直到它开始处理一个特定文件。
答案 0 :(得分:16)
此处的问题是css/iconic/open-iconic-bootstrap.css
引用了一个文件open-iconic.eot
,该文件并不存在于预期的位置。
当您使用该存储后端运行collectstatic
时,Django会尝试重写CSS文件中的所有URL,以便他们通过新名称引用文件,例如css/iconic/open-iconic.8a7442ca6bed.eot
。如果它无法找到该文件,则会因该错误而停止。
答案 1 :(得分:8)
我刚遇到同样的问题并通过从我的设置文件
中删除此行来解决此问题STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
我从Heroku文档页面获得了这一行......
答案 2 :(得分:7)
当我所有的.css文件都存在时,我有这个错误声称缺少.css文件,因为我信任Heroku文档:
STATIC_ROOT = 'staticfiles'
通过WhiteNoise文档:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
修复很简单,但在Heroku修复他们的文档(我提交了反馈)之前,请确保解决方案至少出现在SO中。
答案 3 :(得分:3)
这里的问题是使用
$final = array();
$search_for = '<POPULARITY URL';
$part = file_get_contents_curl('http://data.alexa.com/data?cli=10&dat=snbamz&url='.trim($domain));
$str = explode($search_for, $part); //ERROR HAPPENS HERE//
$str = array_shift(explode('"/>', $str[1]));
$str = explode('TEXT="', $str);
$str[1] = str_replace('" SOURCE="panel',"",$str[1]);
preg_match('#<COUNTRY CODE="(.*?)" NAME="(.*?)" RANK="(.*?)"#si', $part, $c);
$final['global_rank'] = $str[1];
$final['country_name'] = $c[2];
$final['country_rank'] = $c[3];
return $final;
或
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
以不同于runserver的方式使用Django的静态文件存储。有关解释,请参阅Django文档:https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#django.contrib.staticfiles.storage.ManifestStaticFilesStorage.manifest_strict
我相信在运行collectstatic时会引用引用的清单,因此这样做会暂时解决此问题,但如果您修改了任何静态文件,则可能不希望在每次测试运行之前运行collectstatic。另一种解决方案是为测试禁用此设置,并在生产中运行它。
答案 4 :(得分:2)
在开发中,Django的runserver
自动接管静态文件处理。
在大多数情况下,这很好,但是这意味着WhiteNoise对静态文件处理所做的某些改进在开发中将不可用,这为开发和生产环境之间的行为差异提供了可能性。因此,在开发中也使用WhiteNoise是个好主意。
您可以通过将--nostatic
选项传递给runserver命令来禁用Django的静态文件处理,并允许WhiteNoise接管,但是您需要记住每次调用runserver时都要添加此选项。一种更简单的方法是编辑您的settings.py文件,并将whitenoise.runserver_nostatic
添加到INSTALLED_APPS
列表的顶部:
INSTALLED_APPS = [
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
# ...]
来源-http://whitenoise.evans.io/en/stable/django.html#using-whitenoise-in-development
答案 5 :(得分:1)
对我来说,修复只是添加一个静态的&#39;文件夹到顶级目录(myapp / static做了伎俩)。如果您正在设置STATIC_URL但尚未创建该目录,则即使您没有将该目录用于具有whitenoise的静态文件,也会引发错误。
STATIC_URL = '/static/'
答案 6 :(得分:1)
我有类似的问题,但有一点麻烦。
我部署在pythonanywhere上。如果我调试True,app运行正常。但如果转弯调试False,应用程序崩溃时会出现一行错误,即一行是摘要
<div *ngFor="let set of sets.array">
<p>{{set.name}}</p>
<p>{{set.title}}</p>
</div>
我从ValueError: Missing staticfiles manifest entry for 'favicons/favicon.ico'
更改为STATIC_ROOT = 'staticfiles
删除了STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
目录,然后重新运行staticfiles
。
现在app运行良好
答案 7 :(得分:0)
通过在生产中的settings.py中评论whitenoise,它对我有用。
python-3.6.2
答案 8 :(得分:0)
我整天都在处理这个问题。原来问题是staticfiles
目录未签到git。我在该目录中创建了一个虚拟文件,将其检入,一切都很好。我相信,在Whitenoise文档中也提到了这一点。
答案 9 :(得分:0)
请确保检查与静态文件相关的所有设置,尤其要确保路径指向正确的位置。我个人的STATICFILES_DIRS
中有一个指向错误的路径。
答案 10 :(得分:0)
与其他所有人一样,我对此问题有一个独特的解决方案……事实证明,我的url()
文件中有一个styles.css
,语法错误。
一旦我更改:
background-image: url( '../images/futura_front_blank_medium.jpg' );
到
background-image: url('../images/futura_front_blank_medium.jpg');
(注意细微的区别-我删除了字符串两侧的空格)
然后python manage.py collectstatic
正常工作,但我没有收到该错误。
答案 11 :(得分:0)
whitenoise.django.GzipManifestStaticFilesStorage
别名现已被删除。相反,您应该使用正确的导入路径:whitenoise.storage.CompressedManifestStaticFilesStorage
。
根据文档here。
答案 12 :(得分:0)
就我而言,还有另一种解决方案。在Heroku的配置中,我有一个设置:
DISABLE_COLLECTSTATIC = 0
应该让Heroku通过推送到heroku master来自动收集静态信息,但是没有!
我所做的是在
上删除此设置 -3600 <= pd.Timedelta(days=-1, hours=23).total_seconds() <= 3600
True
之后,Heroku自动收集了静态文件,问题消失了。
答案 13 :(得分:0)
有两种选择: