Google App Engine:不会提供低于错误的静态资源:

时间:2014-06-08 13:45:36

标签: python css google-app-engine

谷歌在这种情况下没用,似乎我第一次遇到这个错误:/在我的Mac上工作正常,但在Windows 8装备上使用相同的文件在尝试请求静态时在日志中出现以下错误像CSS文件和图像的资产。以下是错误摘录:

INFO     2014-06-08 14:42:28,431 module.py:639] default: "GET /css/rootStyles.css HTTP/1.1" 200 5454
ERROR    2014-06-08 14:42:28,431 module.py:714] Request to '/css/rootStyles.css' failed
Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\module.py", line 710, in _handle_request
    return handler.handle(match, environ, wrapped_start_response)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\static_files_handler.py", line 369, in handle
    return self._handle_path(full_path, environ, start_response)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\static_files_handler.py", line 182, in _handle_path
    start_response('200 OK', headers)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\module.py", line 640, in wrapped_start_response
    return start_response(status, response_headers, exc_info)
  File "C:\Program Files (x86)\Google\google_appengine\lib\cherrypy\cherrypy\wsgiserver\wsgiserver2.py", line 2155, in start_response
    raise TypeError("WSGI response header value %r is not of type str." % v)
TypeError: WSGI response header value u'text/css' is not of type str.
INFO     2014-06-08 14:42:28,433 module.py:639] default: "GET /css/rootStyles.css HTTP/1.1" 500 -

我的app.yml文件如下所示:

application: foobarbaz
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico
- url: /img
  static_dir: img
- url: /font
  static_dir: font
- url: /css
  static_dir: css

- url: .*
  script: main.app

libraries:
- name: webapp2
  version: "2.5.2"
- name: jinja2
  version: latest

7 个答案:

答案 0 :(得分:10)

怪异。另一个人昨天在Windows上有静态文件500错误。这可能是GAE错误,其中mimetype猜测作为标头中的python unicode字符串发送。尝试将mime_type: "text/css"添加到- url: /css,如下所示:

- url: /css
  static_dir: css
  mime_type: "text/css"
在app.yaml中

。我不认为这会解决问题,但有助于诊断。您很可能会在img和字体标题上出现另一个错误。

您可以为其他人使用通配符映射:

- url: /img/(.*\.gif)$
  static_files: img/\1
  upload: img/.*\.gif$
  mime_type: "image/gif"

- url: /img/(.*\.png)$
  static_files: img/\1
  upload: img/.*\.png$
  mime_type: "image/x-png"

- url: /img/(.*\.jpg)$
  static_files: img/\1
  upload: img/.*\.jpg$
  mime_type: "image/jpeg"

和类似的字体。就像我说的,这可能只是GAE for Windows中的一个错误的补丁。我不完全理解请求和响应之间的握手,但您可以尝试将以下内容添加为模板中的第一个<meta>标记,以查看是否可以改善通信:

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta charset="UTF-8">

答案 1 :(得分:3)

我在使用python 2.7.7的Windows 8.1上使用GAE SDK 1.9.6时遇到了同样的问题(我只使用了python版本并且使用Go SDK经历过这种情况)。

我只是更新到python 2.7.8 ,似乎问题已经解决。

只是想在这里分享一下,看看其他人是否可以证实这一点。我还将此结果添加到了@Bradley提交的bug。希望这会有所帮助。

答案 2 :(得分:1)

作为我编辑的解决方法 \谷歌\ AppEngine上\ TOOLS \ devappserver2 \ ADMIN \ static_file_handler.py 在

  

content_type,_ = mimetypes.guess_type(asset_path)
  断言content_type,(

  

content_type,_ = mimetypes.guess_type(asset_path)
  content_type = str(content_type)
  断言content_type,(

当然是适当的缩进

这仅适用于管理控制台 你也可以尝试一下 \谷歌\应用服务引擎\工具\ devappserver2 \ static_file_handler.py


return self._url_map.mime_type

return str(self._url_map.mime_type)
我猜,但我还没有真正尝试过。

答案 3 :(得分:1)

在GAE的问题跟踪器中启动了一个错误。见这里:https://code.google.com/p/googleappengine/issues/detail?id=11001 与此同时,该线程上的#4号临时补丁正常工作。

google\appengine\tools\devappserver2\static_files_handler.py

line 166, 167, 168, need add str to self._get_mime_type(full_path)

if user_headers.Get('Content-type') is None:
    #headers.append(('Content-type', self._get_mime_type(full_path)))<br />
    headers.append(('Content-type', str(self._get_mime_type(full_path))))<br /><br />
    # 2014-06-09 fix on Win7 "TypeError: WSGI response header value u'text/html' is not of type str"

答案 4 :(得分:0)

我通过将python从2.7.7降级到2.7.6来摆脱这个问题。也许你们能够在2.7.7 release notes中发现导致这种行为的变化。

答案 5 :(得分:0)

我有同样的问题'TypeError:WSGI响应头值y text / css'不是字节字符串'。我看不到CSS样式,它给我状态500。 我使用python 2.7.7并将其更改为2.7.6并且一切正常!

答案 6 :(得分:0)

如果/ var已满,也会报告错误500(没有进一步详细说明;没有回溯或其他内容)。