rails assets revisited
TRANSCRIPT
![Page 1: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/1.jpg)
Rails Assets Revisited• Jørgen Orehøj Erichsen
• CTO, Holdsport.dk, Rails freelancer
• joerichsen @ twitter, github, et. al.
![Page 2: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/2.jpg)
The Asset Pipeline• preprocessing
• concatenation
• minification/compression
• fingerprinting
• gzip compression
![Page 3: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/3.jpg)
The Asset PipelinePros
• Great Idea
• Just Works (tm)
Cons
• only happens when performing a request
• slow, Slow, SLOW
![Page 4: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/4.jpg)
A Faster and More Flexible Approach
![Page 5: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/5.jpg)
Gulp• Automate and enhance your workflow
• The streaming build system
![Page 6: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/6.jpg)
Gulp Filosofy• stream files through "pipes"
• very "unixy" :-)
![Page 7: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/7.jpg)
Gulp Examplevar gulp = require('gulp');var concat = require('gulp-concat');
gulp.task('default', function() { gulp.src(["app/assets/stylesheets/**/*"]) .pipe(concat('application.css')) .pipe( gulp.dest("public/assets/stylesheets/") )});
![Page 8: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/8.jpg)
Gulp PluginsReplacing the asset pipeline
• gulp-concat
• gulp-minify-css/gulp-uglify
• gulp-sass/gulp-coffee
• gulp-rev-all
• gulp-gzip
![Page 9: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/9.jpg)
Gulp PluginsExtra stuff
• gulp-sourcemaps
• gulp-watch
• gulp-imagemin
• gulp-csslint/gulp-jslint
• gulp-bless
• gulp-filter
![Page 10: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/10.jpg)
Example for Rails - part Igulp.task("js", function() { var coffeeFilter = gulpFilter(['**/*.coffee']); gulp.src(["app/assets/javascripts/**/*.coffee", "app/assets/javascripts/**/*.js"]) .pipe(coffeeFilter) .pipe(coffee()) .pipe(coffeeFilter.restore()) .pipe(concat("application.js")); .pipe(gulp.dest("public/javascripts/"))});
![Page 11: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/11.jpg)
Example - Updating stuff automaticallygulp.task('watch', function() { gulp.watch("app/assets/javascripts/**/*", ['js']);});
![Page 12: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/12.jpg)
Example - Productionif (["production"].indexOf(railsEnv) !== -1) { stream = stream .pipe(uglify()) .pipe(gulp.dest("public/javascripts/")) .pipe(gzip({ gzipOptions: { level: 9 } }))}
![Page 13: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/13.jpg)
DEMO
![Page 14: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/14.jpg)
Fix Railsclass AssetManifest def self.manifest if File.exists?("rev-manifest.json") @manifest ||= JSON.parse(File.read("rev-manifest.json")) end end
def self.stylesheet_path(url) if AssetManifest.manifest url += ".css" unless url.end_with?(".css") AssetManifest.manifest[url] || url else url end end ...
![Page 15: Rails assets revisited](https://reader035.vdocuments.us/reader035/viewer/2022071822/55b865cfbb61eb7e578b460b/html5/thumbnails/15.jpg)
References• http://gulpjs.com/
• https://bugsnag.com/blog/replacing-the-rails-asset-pipeline-with-gulp
• http://viget.com/extend/gulp-rails-asset-pipeline
• http://bower.io/