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
Antwort
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
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
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)
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
Welche Version von Ritzel verwenden Sie (Check Gemfile.lock)? –
Es ist nur die Abhängigkeit von Schienen 4.2.1: Kettenräder 3.0.1, Kettenräder-Schienen 2.2.4 – ding280