4

Rails アプリケーションをオフラインで動作させようとしています。オンラインの場合、アプリケーションは正常に動作しているように見えます。

Chrome では、サーバーが実行されているときに、アプリケーションを実行すると Chrome コンソールからこれが表示されます (一部が切り取られています)。:

Document was loaded from Application Cache with manifest
http://localhost:3000/application.manifest
Application Cache Checking event
Application Cache Downloading event
...
Application Cache Progress event (5 of 16) http://localhost:3000/assets/todos.css.scss
Application Cache Progress event (6 of 16) http://localhost:3000/assets/application.css
Application Cache Progress event (7 of 16) http://localhost:3000/assets/todos.js.coffee
Application Cache Progress event (8 of 16) http://localhost:3000/assets/jquery.tmpl.js
Application Cache Progress event (9 of 16) http://localhost:3000/assets/jquery.offline.js
...
Application Cache Progress event (11 of 16) http://localhost:3000/assets/jquery.js
...
Application Cache Progress event (13 of 16) http://localhost:3000/assets/json.js
Application Cache Progress event (14 of 16) http://localhost:3000/assets/scaffolds.css.scss
Application Cache Progress event (15 of 16) http://localhost:3000/assets/application.js
Application Cache Progress event (16 of 16) 
Application Cache UpdateReady event

ただし、オフラインではこれが表示されます(これも一部が切り取られています)。GET行はロード エラーであることに注意してください。

Document was loaded from Application Cache with manifest http://localhost:3000/application.manifest
Application Cache Checking event
GET http://localhost:3000/assets/application.css?body=1  todos:5
GET http://localhost:3000/assets/scaffolds.css?body=1  todos:6
GET http://localhost:3000/assets/todos.css?body=1  todos:7
GET http://localhost:3000/assets/jquery.js?body=1  todos:8
GET http://localhost:3000/assets/jquery_ujs.js?body=1  todos:8
GET http://localhost:3000/assets/jquery.offline.js?body=1  todos:8
GET http://localhost:3000/assets/jquery.tmpl.js?body=1  todos:8
GET http://localhost:3000/assets/json.js?body=1  todos:8
GET http://localhost:3000/assets/offline.js?body=1  todos:8
GET http://localhost:3000/assets/todos.js?body=1  todos:8
GET http://localhost:3000/assets/application.js?body=1  todos:8
Application Cache Error event: Manifest fetch failed (-1) http://localhost:3000/application.manifest

?body=1特に、オフライン時にファイル名に が追加されていることに気付きました。

環境:

  • レール: 3.2.8
  • ルビー 1.9.3p194
  • ウェブリック: 1.3.1
  • MySQL: 5.5.28 MySQL コミュニティ サーバー
  • Chrome: バージョン 22.0.1229.94 m
  • OS: Windows 7 Enterprise バージョン 6.1 (ビルド 7601: Service Pack 1)

宝石(私が関連していると思う宝石):

  • jquery レール (2.1.3)
  • json (1.7.5、1.5.4)
  • ラックオフライン (0.6.4)
  • スプロケット (2.1.3)

アプリケーション マニフェスト:

CACHE MANIFEST
# ef05db1f746b226b3eb8b3673d65d3585eb8a9e1e35f79a6fc9d90693ff9a569
404.html
422.html
500.html
index.html
assets/application.js
assets/jquery.js
assets/jquery.offline.js
assets/jquery.tmpl.js
assets/json.js
assets/todos.js.coffee
assets/application.css
assets/scaffolds.css.scss
assets/todos.css.scss

NETWORK:
/

application.html.erb :

<!DOCTYPE html>
<html manifest="/application.manifest">
<head>
    <title>TestOffsite</title>
    <%= stylesheet_link_tag    "application", :media => "all" %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
</head>
<body>

<%= yield %>

</body>
</html>

todos_controller.erb (抜粋):

class TodosController < ApplicationController
  # GET /todos
  # GET /todos.json
  respond_to :html, :json   

  def index
    @todos = Todo.all
respond_with(@todos)
    #respond_to do |format|
    #  format.html # index.html.erb
    #  format.json { render json: @todos }
    #end
  end
...

manifest.yml の内容:

---
rails.png: rails-be8732dac73d845ac5b142c8fb5f9fb0.png
application.js: application-39fb9cbdc400e6885a41059ea60f3851.js
application.css: application-0149f820dbdd285aa65e241569d8c256.css

どんな助けでも大歓迎です。

4

1 に答える 1

0

私のローカル環境が /public/assets の代わりに app/assets/* ディレクトリからアセットをプルするようにするには、development.rb で次のように設定する必要があります:

  # Don't fallback to assets pipeline if a precompiled asset is missed (ON for Heroku)
  # config.assets.compile = true

  # Compress JavaScripts and CSS (ON for Heroku)
  # config.assets.compress = true

  # Generate digests for assets URLs (ON for Heroku)
  # config.assets.digest = true

  # Don't pull public assets in development mode - remove to check CDN/S3 assets (OFF for Heroku)
  config.assets.prefix = "/dev-assets"

  # Enable serving of images, stylesheets, and JavaScripts from an asset server (ON for Heroku)
  # config.action_controller.asset_host = "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
  # config.action_controller.asset_host = "http://cdn%d.mydomain.com" 

Heroku ステージング サーバーに移行する準備が整うと、次のようになります。

  # Don't fallback to assets pipeline if a precompiled asset is missed (ON for Heroku)
  config.assets.compile = true

  # Compress JavaScripts and CSS (ON for Heroku)
  config.assets.compress = true

  # Generate digests for assets URLs (ON for Heroku)
  config.assets.digest = true

  # Don't pull public assets in development mode - remove to check CDN/S3 assets (OFF for Heroku)
  # config.assets.prefix = "/dev-assets"

  # Enable serving of images, stylesheets, and JavaScripts from an asset server (ON for Heroku)
  # config.action_controller.asset_host = "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
  config.action_controller.asset_host = "http://cdn%d.mydomain.com" 

CloudFront が新しくプッシュされたアセットを提供していることを確認したい場合もあれば、ローカルの速度と CSS または JS ファイルを開発する機能が必要な場合もあります。

于 2014-02-20T02:24:24.337 に答える