静态资产无法在Google应用引擎上运行

时间:2015-04-23 10:24:45

标签: angularjs google-app-engine

我在google app引擎上部署了angularjs应用,但是有关于js,css,bower组件和组件目录的问题。 javascript和css未在Google应用引擎上投放。这是我的app目录结构。

application: myappid
version: 1
runtime: python27
threadsafe: true
api_version: 1

handlers:

url: css
static_dir: app/css
mime_type: text/css

url: js
static_dir: app/js
mime_type: text/javascript

url: /components
static_files: components
upload: components
mime_type: text/javascript

url: /bower_components
static_files: /bower_components

upload: /bower_components
mime_type: text/javascript

url: (.*)/.*
static_files: app/index.html
upload: app

url: (.*)
static_files: app
upload: app

这是我的app.yaml文件内容:

INFO     2015-04-23 10:02:33,782 module.py:788] default: "GET /app/ HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,846 module.py:788] default: "GET /app/bower_components/html5-boilerplate/css/normalize.css HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,847 module.py:788] default: "GET /app/bower_components/html5-boilerplate/css/main.css HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,854 module.py:788] default: "GET /app/bower_components/angular-ui-grid/ui-grid.min.css HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,854 module.py:788] default: "GET /app/css/app.css HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,854 module.py:788] default: "GET /app/bower_components/bootstrap/dist/css/bootstrap.css HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,854 module.py:788] default: "GET /app/bower_components/angular-ui-select/dist/select.min.css HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,856 module.py:788] default: "GET /app/bower_components/select2/select2.css HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,858 module.py:788] default: "GET /app/bower_components/selectize/dist/css/selectize.default.css HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,862 module.py:788] default: "GET /app/bower_components/angular/angular.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,863 module.py:788] default: "GET /app/bower_components/angular-resource/angular-resource.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,864 module.py:788] default: "GET /app/bower_components/angular-route/angular-route.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,864 module.py:788] default: "GET /app/bower_components/html5-boilerplate/js/vendor/modernizr-2.6.2.min.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,865 module.py:788] default: "GET /app/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,868 module.py:788] default: "GET /app/bower_components/angular-ui-grid/ui-grid.min.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,869 module.py:788] default: "GET /app/bower_components/angular-ui-select/dist/select.min.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,870 module.py:788] default: "GET /app/bower_components/angular-sanitize/angular-sanitize.min.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,870 module.py:788] default: "GET /app/bower_components/selectize/dist/js/selectize.min.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,871 module.py:788] default: "GET /app/bower_components/angular-ui-router/release/angular-ui-router.min.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,874 module.py:788] default: "GET /app/bower_components/underscore/underscore.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,877 module.py:788] default: "GET /app/js/controllers.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,877 module.py:788] default: "GET /app/bower_components/angular-underscore/angular-underscore.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,877 module.py:788] default: "GET /app/js/app.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,881 module.py:788] default: "GET /app/components/version/version.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,884 module.py:788] default: "GET /app/components/version/version-directive.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,885 module.py:788] default: "GET /app/js/services.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,885 module.py:788] default: "GET /app/components/version/interpolate-filter.js HTTP/1.1" 304 -
INFO     2015-04-23 10:02:33,885 module.py:788] default: "GET /app/js/filters.js HTTP/1.1" 304 -

我在控制台上收到这些错误:

{{1}}

任何人都可以解释什么是错的吗?

2 个答案:

答案 0 :(得分:0)

没有必要出错。

您的所有来电均以状态码304返回 304表示自上次访问以来所请求的资源未被修改 304是错误指示代码。

您的浏览器仍然可以在其缓存中获得请求的结果。

Wikipedia's explanation很简短,但很清楚。

  

304未修改

     

表示自版本以来尚未修改资源   由请求标头If-Modified-Since或If-None-Match指定。   这意味着没有必要重新传输资源,因为   客户端仍然有以前下载的副本。

另请参阅RFC,其中包含更多详细信息。

  

304未修改

     

如果客户端执行了条件GET请求并且访问权限是   允许,但文件尚未修改,服务器应该   回复此状态代码。 304响应不得包含   message-body,因此始终由第一个空行终止   在标题字段之后。

     

响应必须包含以下标题字段:

     
      
  • 日期,除非第14.18.1节要求省略,否则无时钟源服务器遵守这些规则,并且代理和客户端添加   他们自己的日期对任何收到的回复没有一个(已经   由[RFC 2068]第14.19节规定,高速缓存将运行   正确。

  •   
  • ETag和/或Content-Location,如果标题已发送       在对同一请求的200回复​​中

  •   
  • 如果字段值可能会过期,缓存控制和/或变化       与之前任何响应中发送的内容不同       变量如果条件GET使用强缓存验证器(参见第13.3.3节),则响应不应包含其他   实体头。否则(即,条件GET使用弱   验证者),响应不得包含其他实体标题;这个   防止缓存的实体体之间的不一致和更新   头。
  •   
     

如果304响应表明当前没有缓存的实体,那么   缓存必须忽略响应并重复请求而不使用   有条件的。

     

如果缓存使用收到的304响应来更新缓存条目,那么   缓存必须更新条目以反映给定的任何新字段值   回应。

另请阅读此相关主题 What is the difference between HTTP status code 200 (cache) vs status code 304?

答案 1 :(得分:0)

您在app.yaml中的网址路由不符合您要实现的目标。您正在使用/app/js/foo.js等网址请求javascript文件。你的路由

url: js
static_dir: app/js

匹配以'js'开头的url路径

url: (.*)/.*
static_files: app/index.html

匹配所有带斜杠的路径(例如,your-app.appspot.com / app / js / app.js)并返回app / index.html。

app.yaml中的网址是需要匹配完整路径的regexp,而不是目录或前缀。