2015-04-17 11 views
8

Sto usando Rails 4.2 per un progetto abbastanza semplice. Quando eseguo lo rake assets:precompile (per gli ambienti di sviluppo e di produzione) ottengo un file application-xyz.js e application-xyz.css in pubblico/risorse. Ma non ci saranno versioni gzip create, cioè non application-xyz.js.gz e non application-xyz.css.gz. Non sono a conoscenza di alcuna opzione per disabilitare questa funzione. Mi sono perso qualcosa?manca la versione gzip delle risorse css e js

+0

Quale versione di pignoni stai usando (controllare Gemfile.lock)? –

+0

E 'solo la dipendenza delle rotaie 4.2.1: pignoni 3.0.1, rocchetti di trascinamento-rotaie 2.2.4 – ding280

risposta

10

I pignoni 3 non generano più versioni compresse con gzip. Secondo this issue è in gran parte perché sono stati usati raramente realmente.

È possibile riportare questa funzionalità gzipping beni stessi dopo precompilazione, per esempio, questo example capistrano task di Xavier Noria utilizza find per iterare su tutto il file CSS e JS nella cartella attivi e quindi utilizza xargs passarli a gzip:

namespace :deploy do 
    # It is important that we execute this after :normalize_assets because 
    # ngx_http_gzip_static_module recommends that compressed and uncompressed 
    # variants have the same mtime. Note that gzip(1) sets the mtime of the 
    # compressed file after the original one automatically. 
    after :normalize_assets, :gzip_assets do 
    on release_roles(fetch(:assets_roles)) do 
     assets_path = release_path.join('public', fetch(:assets_prefix)) 
     within assets_path do 
     execute :find, ". \\(-name '*.js' -o -name '*.css' \\) -exec test ! -e {}.gz \\; -print0 | xargs -r -P8 -0 gzip --keep --best --quiet" 
     end 
    end 
    end 
end 
3

preferisco

namespace :assets do 
    desc "Create .gz versions of assets" 
    task :gzip => :environment do 
    zip_types = /\.(?:css|html|js|otf|svg|txt|xml)$/ 

    public_assets = File.join(
     Rails.root, 
     "public", 
     Rails.application.config.assets.prefix) 

    Dir["#{public_assets}/**/*"].each do |f| 
     next unless f =~ zip_types 

     mtime = File.mtime(f) 
     gz_file = "#{f}.gz" 
     next if File.exist?(gz_file) && File.mtime(gz_file) >= mtime 

     File.open(gz_file, "wb") do |dest| 
     gz = Zlib::GzipWriter.new(dest, Zlib::BEST_COMPRESSION) 
     gz.mtime = mtime.to_i 
     IO.copy_stream(open(f), gz) 
     gz.close 
     end 

     File.utime(mtime, mtime, gz_file) 
    end 
    end 

    # Hook into existing assets:precompile task 
    Rake::Task["assets:precompile"].enhance do 
    Rake::Task["assets:gzip"].invoke 
    end 
end 

Source

3

A partire da Sprockets 3.5.2, la compressione gzip è di nuovo abilitata e le risorse gz vengono generate. Devi configurare il tuo server per servirli correttamente. Per Nginx:

location ~ ^/(assets)/ { 
    gzip_static on; 
} 

Poi nel application.rb:

config.middleware.insert_before(Rack::Sendfile, Rack::Deflater) 

    # Compress JavaScripts and CSS. 
    config.assets.compress = true 
    config.assets.js_compressor = Uglifier.new(mangle: false) 
+0

Questo ha funzionato per me. Vale la pena notare che è necessario disabilitare "Disabilita cache" in Chrome Dev Tools almeno una volta prima di ricaricarlo affinché la modifica abbia effetto e vedere gzip nella colonna Codifica contenuto. – Allen

Problemi correlati