2015-04-17 3 views
8

Ich verwende Rails 4.2 für ein recht einfaches Projekt. Wenn ich rake assets:precompile (für die Entwicklung sowie Produktionsumgebungen) laufen lasse, erhalte ich eine application-xyz.js und application-xyz.css Datei in öffentlichen/Assets. Aber es wird keine gzip-Versionen geben, d. H. Keine application-xyz.js.gz und keine application-xyz.css.gz. Mir ist keine Möglichkeit bekannt, diese Funktion zu deaktivieren. Habe ich etwas vergessen?fehlt gzip Version von css und js Assets

+0

Welche Version von Ritzel verwenden Sie (Check Gemfile.lock)? –

+0

Es ist nur die Abhängigkeit von Schienen 4.2.1: Kettenräder 3.0.1, Kettenräder-Schienen 2.2.4 – ding280

Antwort

10

Ritzel 3 generiert keine gezippten Versionen von Assets mehr. Laut this issue liegt es hauptsächlich daran, dass sie selten tatsächlich genutzt wurden.

Sie können diese Funktionalität bringen von Vermögenswerten selbst nach Precompilieren zum Beispiel Gzipping diese example capistrano task von Xavier Noria verwendet find iterieren alle CSS und JS-Dateien in Ihr Vermögen Ordner und verwendet dann xargs sie gzip weitergeben müssen:

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

ich ziehe

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

Ab Sprockets 3.5.2 ist die gzip-Komprimierung wieder aktiviert und gz-Assets werden generiert. Sie müssen Ihren Server so konfigurieren, dass er sie korrekt bedient. Für Nginx:

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

Dann in 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

Das hat bei mir funktioniert. Beachten Sie, dass Sie in den Chrome-Entwicklungstools mindestens einmal "Cache deaktivieren" aktivieren müssen, bevor Sie die Änderung erneut durchführen, damit die Änderung wirksam wird und gzip in der Spalte Content-Encoding angezeigt wird. – Allen