2011-01-18 38 views
6

Tôi có ứng dụng đường ray mà tôi đang cố gắng sử dụng bộ đệm ẩn ứng dụng HTML5 bằng Rack :: Offline. Tệp application.manifest được thiết lập và đang được tải xuống và kiểm tra bằng trang HTML của tôi. Các biểu hiện trông như sau:Tệp kê khai ứng dụng HTML5 không xóa bộ nhớ cache trên thay đổi tệp kê khai

CACHE MANIFEST 
# 2d9bf2b03a07dc960fd8fe69659ceeffd4d28ccf8619669a506c3682bf223878 
404.html 
422.html 
500.html 
login.html 
stylesheets/scaffold.css 
javascripts/jquery.min.js 
javascripts/jquery.js 
javascripts/application.js 
javascripts/rmbz.js 
javascripts/rails.js 
images/rails.png 

NETWORK: 
/

Trang tôi đang tiếp cận là localhost: 3000/mobile, và nó đã được lưu trữ tuyệt vời (có thể xem khi tôi đi xuống các máy chủ ray). Tuy nhiên, tệp application.manifest mà nó tham chiếu đã thay đổi (trên thực tế nó thay đổi với mỗi yêu cầu bằng cách thao tác id thập lục phân đã nhận xét), nhưng Chrome không cập nhật trang. Nhật ký bảng điều khiển trong Chrome cung cấp những điều sau:

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 (0 of 12) http://localhost:3000/login.html 
Application Cache Progress event (1 of 12) http://localhost:3000/404.html 
Application Cache Progress event (2 of 12) http://localhost:3000/422.html 
Application Cache Progress event (3 of 12) http://localhost:3000/javascripts/rails.js 
Application Cache Progress event (4 of 12) http://localhost:3000/javascripts/rmbz.js 
Application Cache Progress event (5 of 12) http://localhost:3000/images/rails.png 
Application Cache Progress event (6 of 12) http://localhost:3000/500.html 
Application Cache Progress event (7 of 12) http://localhost:3000/javascripts/jquery.js 
Application Cache Progress event (8 of 12) http://localhost:3000/stylesheets/scaffold.css 
Application Cache Progress event (9 of 12) http://localhost:3000/javascripts/jquery.min.js 
Application Cache Progress event (10 of 12) http://localhost:3000/mobile 
Application Cache Progress event (11 of 12) http://localhost:3000/javascripts/application.js 
Application Cache Error event: Manifest changed during update, scheduling retry 

Tôi không hiểu tại sao nó không thành công. Dường như nó đang làm mọi thứ cần cho đến dòng cuối cùng! Tôi nhận được một bản ghi tương tự nếu tôi điều hướng trong trình duyệt của mình tới localhost: 3000/application.manifest - có vẻ như tệp kê khai được lưu vào bộ nhớ cache, vì vậy có thể đó là lý do tại sao nó phàn nàn rằng tệp kê khai đã thay đổi? Bất kỳ ý tưởng?

Cảm ơn!

+0

Kể nhận này được giải quyết? Các câu trả lời dưới đây là vô ích. –

+0

Đã khắc phục sự cố của tôi và trả lời dưới đây. Hy vọng nó là một số sử dụng nếu bạn chưa sửa lỗi này. –

Trả lời

1

Tôi đã có cùng một vấn đề, bị buộc phải thay đổi về đá quý bản thân . Vấn đề của tôi phải liên quan đến thư mục lồng nhau trong/public/images

Bắt đầu bằng cách tìm đá quý của bạn được cài đặt ("môi trường đá quý" sẽ giúp bạn) và điều hướng vào /rack-offline-0.6.1/lib.

Chỉnh sửa tệp rack-offline.rb. Xóa dòng 33 và thay thế bằng:

"#{root}/images/**/*.png", 
"#{root}/images/**/*.jpg", 
"#{root}/images/**/*.gif"] 

Khởi động lại máy chủ đường ray và thử lại. Làm việc cho tôi, hy vọng nó sẽ giúp bạn.

2

Tệp cuối cùng được yêu cầu bởi Chrome là application.manifest, nếu điều này đã thay đổi kể từ yêu cầu ban đầu (như bạn nói), điều đó sẽ làm mất hiệu lực bộ nhớ cache. Bạn cần giữ cho tệp kê khai không thay đổi cho đến khi một trong các tệp được liệt kê trong tệp kê khai đã thay đổi.

+0

Xin chào Robert. Không nên thay đổi trong tệp kê khai vừa nhắc Chrome tải xuống mọi thứ trong tệp kê khai? Đó là những gì hướng dẫn tôi đang theo dõi dường như nói (http://asciicasts.com/episodes/247-offline-apps-part-1): "Khi băm thay đổi điều này chỉ thị cho trình duyệt rằng tệp kê khai bộ nhớ cache đã thay đổi và các tập tin mà nó liệt kê cần phải được tải xuống lại. Điều này sẽ xảy ra với mọi yêu cầu trong chế độ phát triển nhưng trong quá trình sản xuất nó sẽ chỉ xảy ra khi một trong các tệp thay đổi. " – kmc

+0

@kmc Có, và vì điều cuối cùng mà nó tải xuống là tệp kê khai (lần nữa) và tệp kê khai đã thay đổi, khi đó tệp bộ nhớ cache mà tệp vừa tải xuống bị vô hiệu. Bạn có thể xác minh điều này bằng cách nhìn vào nhật ký máy chủ (có thể là đầu ra cho bàn điều khiển?). Tôi không có ý tưởng về thư viện bạn đang sử dụng, nhưng nếu nó thay đổi tệp kê khai khi không có thay đổi đối với tệp trong tệp kê khai thì nó sẽ không hoạt động. – robertc

2

Điều này xảy ra trong chế độ phát triển Rails mỗi lần vì theo mặc định, khóa được tạo lại mỗi khi trang được nhấn. Bạn có thể giải quyết vấn đề này bằng cách đặt cache_classes thành true trong environments/development.rb. Tuy nhiên, được cảnh báo rằng cache_classes không cụ thể cho Rack::Offline. Vì vậy, bạn có thể nhận được một số hành vi bất ngờ ActiveRecord trong môi trường phát triển của mình, nếu bạn thực hiện thay đổi.

3

Giá :: Ngoại tuyến dường như đang sử dụng cửa sổ thời gian để làm mới hàm băm trong tệp kê khai (lib/rack/offline.rb: 84).

now = Time.now.to_i - Time.now.to_i % @cache_interval 

# @cache_interval defaults to 10 seconds 

Tệp kê khai được yêu cầu hai lần bởi trình duyệt: một lần khi bắt đầu yêu cầu và khi tất cả bộ nhớ cache được lưu thành công ngoại tuyến.

Khi xử lý yêu cầu của bạn mất nhiều thời gian (rất nhiều nội dung phải được tải), có thể xảy ra yêu cầu đầu tiên được trả lời trong một cửa sổ một lần và yêu cầu cuối cùng được xử lý trong một cửa sổ khác.Kết quả là các hash trong cả hai tệp kê khai sẽ không khớp và bạn nhận được sự kiện "Lỗi Cache ứng dụng: Tệp kê khai đã thay đổi trong quá trình cập nhật, lên lịch thử lại".

Để giảm bớt tỷ lệ cược của một lỗi như vậy trong phát triển bạn có thể chọn để thiết lập một cache_interval lớn hơn như sau:

offline = Rack::Offline.configure :cache_interval => 20 do 
    ... 
end 
Các vấn đề liên quan