【问题标题】:Static assets not working on google app engine静态资产在谷歌应用引擎上不起作用
【发布时间】:2015-04-23 10:24:45
【问题描述】:

我已经在谷歌应用引擎上部署了 angularjs 应用,但是关于 js、css、bower 组件和组件目录存在一些问题。 javascript 和 css 未在 google 应用引擎上提供。这是我的应用程序目录结构。

myapp
  app
    bower_components
        angular-bootstrap
        ..........etc
    components
        version.js
    css
        app.css
    js
        app.js
        controllers.js
        services.js
        filters.js
        directives.js
  index.html
  app.yaml

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

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

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

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 -

谁能解释什么是错的?

【问题讨论】:

    标签: angularjs google-app-engine


    【解决方案1】:

    不一定有什么问题。

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

    您的浏览器可能仍然在其缓存中保留请求的结果。


    Wikipedia's explanation 很短但很清楚。

    304 未修改

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

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

    304 未修改

    如果客户端已经执行了一个有条件的 GET 请求并且访问是 允许,但文档没有被修改,服务器应该 使用此状态码进行响应。 304 响应不得包含 消息体,因此总是由第一个空行终止 在标题字段之后。

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

    • 日期,除非第 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?

    【讨论】:

    • 我已经清除了缓存并再次检查,当我在浏览器调试时进入网络并检查了 css 和 js,它不再存在了。
    • @mirfan899 什么不再存在了?
    • css 和 js 文件的状态为 304,但是当我使用 url 访问它时,它会显示每个 css 和 js 文件的 index.html。
    • @mirfan899 抱歉,我不明白。我的回答没有帮助,还是?
    • /app/components/version/interpolate-filter.js 这是 js 文件的路径,当我在浏览器上打开它时,它会显示 index.html 而不是 js 的内容。我认为这与谷歌应用程序引擎问题有关,因为在我的本地机器上应用程序运行良好,但在谷歌应用程序引擎上的行为不同。
    【解决方案2】:

    您在 app.yaml 中的 url 路由与您要实现的目标不正确。您正在请求带有 /app/js/foo.js 之类的 url 的 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 中的 url 是正则表达式,需要匹配完整路径,而不是目录或前缀。

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多