Erw*_*nGO 6 html5 application-cache ruby-on-rails-4
我正在尝试使用Rails 4创建一个应用程序,无需连接互联网即可使用.我听说过html5应用程序缓存和机架离线gem,这是我采用的方法.现在,它似乎在Rails 4上没有正常工作,因为/application.manifest唯一的节目:
CACHE MANIFEST
# dd1ba6bba9339ef83f9c1225c70289dd6326d3caae01b0d52b502381030dc78f
404.html
422.html
500.html
NETWORK:
*
Run Code Online (Sandbox Code Playgroud)
此外,我正在使用资源预编译,因此application.js,application.css和图像文件的名称中都有一个指纹,类似于application-e8cc2fba8275c884c.js.
我在一个generate_appcahe_manifest.rake文件中创建了自己的解决方案并将其放在/lib/tasks文件夹中.
task :generate_appcache_file => ['deploy:precompile_assets', 'html5_manifest']
desc "Create html5 manifest.appcache"
task :html5_manifest => :environment do
puts 'Creating appcache manifest file...'
File.open("public/manifest.appcache", "w") do |f|
f.write("CACHE MANIFEST\n")
f.write("# Version #{Time.now.to_i}\n\n")
f.write("CACHE:\n")
assets = Dir.glob(File.join(Rails.root, 'public/assets/**/*'))
assets.each do |asset|
if File.extname(asset) != '.gz' && File.extname(asset) != '' && File.extname(asset) != '.json'
filename_path = /#{Rails.root.to_s}\/public\/(assets\/.*)/.match(File.absolute_path(asset))[1].to_s
# f.write("assets/#{File.basename(asset)}\n")
f.write(filename_path.concat("\n"))
end
end
f.write("\nNETWORK:\n")
f.write("*\n")
f.write("http://*\n")
f.write("https://*\n")
end
puts 'Done.'
end
namespace :deploy do
task :precompile_assets do
require 'fileutils'
if File.directory?("#{Rails.root.to_s}/public/assets")
FileUtils.rm_r "#{Rails.root.to_s}/public/assets"
end
puts 'Precompiling assets...'
puts `RAILS_ENV=production bundle exec rake assets:precompile`
puts 'Done.'
end
end
Run Code Online (Sandbox Code Playgroud)
因此,当我rake generate_appcache_file在终端上运行时,我得到了一个/public/manifest.appcache包含编译资产的文件,如下所示:
CACHE MANIFEST
# Version 1409045103
CACHE:
assets/app/backgrounds/strips-05561384267a3286ab382c852f1e8b0d.jpg
assets/app/backgrounds/team-12e0fc5f670794c4eba3db117fba6746.jpg
assets/app-a7de6b02d1d39b783fe4e7ab7906ec95.css
assets/app-ae958853aa13f9011e35121cbe5b3cfe.js
NETWORK:
*
http://*
https://*
Run Code Online (Sandbox Code Playgroud)
最后,我在我的/app/views/layouts/app.html.erb文件上调用该文件:
<!DOCTYPE html>
<html lang="en" manifest="/manifest.appcache">
Run Code Online (Sandbox Code Playgroud)
有关离线应用程序缓存的更多信息,可以在这里找到很多帮助我.
| 归档时间: |
|
| 查看次数: |
1718 次 |
| 最近记录: |