Как создать автономное веб-приложение для рельсов 4?

Я пытаюсь создать приложение с Rails 4, которое можно использовать без подключения к Интернету. Я слышал о кеше приложений html5 и драгоценном камне стойки в автономном режиме, который я выбрал. Теперь кажется, что он не работает должным образом на Rails 4, поскольку /application.manifest показывает только:

CACHE MANIFEST
# dd1ba6bba9339ef83f9c1225c70289dd6326d3caae01b0d52b502381030dc78f

404.html
422.html
500.html

NETWORK:
*

Кроме того, я использую предварительную компиляцию активов, поэтому файлы application.js, application.css и файлы изображений имеют отпечатки пальцев в своих именах, что-то вроде application-e8cc2fba8275c884c.js.


person goerwin    schedule 25.08.2014    source источник


Ответы (1)


Я создал собственное решение в файле 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

Итак, когда я запускаю 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://*

Наконец, я вызываю этот файл в своем файле /app/views/layouts/app.html.erb:

<!DOCTYPE html>
<html lang="en" manifest="/manifest.appcache">

Дополнительную информацию о кеше автономных приложений, которая мне очень помогает, можно найти здесь.

person goerwin    schedule 26.08.2014
comment
вы все еще используете это решение и знаете ли вы, работает ли оно с Rails 5? - person Marklar; 23.02.2017
comment
@Marklar не приходилось использовать его в Rails 5. Но я думаю, что он все равно должен работать. - person goerwin; 23.02.2017