我一直在研究一个要在Google App Engine上托管的新网站。我已经将我的应用程序部署到一个开发项目中,并且托管在这里:
发展:https://herdboss-dev.appspot.com/
工作正常。
但是,当我采用完全相同的代码并将其部署到将要成为真正的生产网站的其他项目中时,它将以application/octet-stream
而不是text/css
的形式提供某些CSS服务,因此这些文件没有被浏览器解析,因此几乎所有的CSS都无法在生产站点上运行:
生产:https://herdboss-prod.appspot.com/
甚至更奇怪的是,某些CSS的服务正确。 /css/normalize.css
被用作text/css
,而/css/site.css
被用作application/octet-stream
。
https://herdboss-prod.appspot.com/css/normalize.css
https://herdboss-prod.appspot.com/css/site.css
https://herdboss-prod.appspot.com/js/jquery-ui-1.12.1.custom-theme/jquery-ui.min.css
我的app.yaml具有用于CSS文件的静态处理程序:
- url: /css
static_dir: css
secure: always
我也尝试添加mime_type,但没有任何改变:
- url: /css
static_dir: css
mime_type: 'text/css'
secure: always
编辑:
在进行实验时,我将site.css切成两半,进行了部署,然后开始正常运行。然后,我恢复了完整大小的site.css,已部署...现在它仍然可以正常运行。
但是我的jquery-ui.min.css仍然充当八位字节流。这太疯狂了。
EDIT2:
它也以错误的mime类型为我的svg服务。
在GAE中,模仿类型是否被彻底打破?如果是这样,为什么它对我的开发人员有效?
答案 0 :(得分:0)
我确实检查了您的两个网站:https://herdboss-prod.appspot.com/,https://herdboss-prod.appspot.com/
我看到您有几个CSS文件:normalize.css,jquery-ui.min.css,base-min.css,grids-min.css,grids-response-custom.css,css?family = Open +无 site.css,即-is-terrible.css,css_compiled.css。
它们全部正确地用作Type:样式表
如果遇到此问题,我建议执行以下测试:
- 在开发者控制台>网络中,通过选项禁用缓存>和重新加载页面检查内容类型。如果有帮助:清理浏览器的缓存。
- 在不同的浏览器中检查页面的内容,因为根据呈现引擎的不同,内容的解释也不同。
- 如果1和2不起作用,并且您正在使用nginx,则很可能是配置问题。更改文件/etc/nginx/conf.d/default.conf。将/etc/nginx/mime.types放在“ http”部分:
http / {
include /etc/nginx/mime.types;
default_type application/octet-stream;
....
}
如果仍然无法使用,请将其移至位置部分
location / {
include /etc/nginx/mime.types;
...
}
答案 1 :(得分:0)
我的解决方案是:
GAE 问题跟踪器存在问题:https://issuetracker.google.com/issues/186012458
最初,我测试了一个解决方法,但这个解决方法在一天后就失效了:我修改了我的 HTML 以从基本上跨站点的版本服务器加载样式表 (hxxps://VERSION-dot-SERVER.appspot.com/static /stylesheet.css)。版本服务器提供了正确的 MIME 类型......但只是一段时间。
我怀疑问题是由于极其罕见的竞争条件(上传期间的缓存访问/刷新?)导致错误的 MIME 类型。根本不可能欺骗 Google 前端来刷新文件。即使附加 .../styles.css?x=1 或切换回旧的代码版本也不会触发刷新。
文件和它们的 MIME 类型似乎是基于它们的散列值存储的,因此重新上传具有相同内容的文件即使只是重命名也没有任何影响。如果您部署具有重复文件的版本,您将看到“已上传 0 个文件”消息。必须对其进行更改和重命名。