Created
June 19, 2014 22:10
-
-
Save skolf/eb468d9726b549bd74e1 to your computer and use it in GitHub Desktop.
A Rake task for precompiling assets in a Sinatra app using Sprockets.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
source 'http://rubygems.org' | |
# app base | |
gem 'logger' | |
gem 'rack' | |
gem 'sinatra' | |
gem 'sinatra-assetpack' | |
gem 'sprockets' | |
gem 'sprockets-helpers' | |
# css, js, and js templates | |
gem 'sass' | |
gem 'coffee-script' | |
gem 'uglifier' | |
gem 'ejs' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'rubygems' | |
require 'bundler' | |
Bundler.require | |
# Configure the base application. | |
# By default this uses SASS for css compression | |
# and Uglifier for Javascript compression. | |
# | |
# A standard directory structure is assumed: | |
# /app | |
# /assets | |
# /images | |
# /javascripts | |
# /stylesheets | |
# /public | |
# /assets | |
# /vendor | |
# /assets | |
# /fonts | |
# /images | |
# /javascripts | |
# /stylesheets | |
class Application < Sinatra::Application | |
set :root, Rake.original_dir | |
set :sprockets, (Sprockets::Environment.new(root) { |env| env.logger = Logger.new(STDOUT) }) | |
set :assets_prefix, 'assets' | |
set :assets_path, File.join(root, 'public', assets_prefix) | |
configure do | |
set :digest_assets, true | |
set :manifest_assets, true | |
sprockets.append_path root+'/app/assets/images' | |
sprockets.append_path root+'/app/assets/javascripts' | |
sprockets.append_path root+'/app/assets/stylesheets' | |
sprockets.append_path root+'/vendor/assets/fonts' | |
sprockets.append_path root+'/vendor/assets/images' | |
sprockets.append_path root+'/vendor/assets/javascripts' | |
sprockets.append_path root+'/vendor/assets/stylesheets' | |
sprockets.css_compressor = :scss | |
sprockets.js_compressor = Uglifier.new :mangle => false | |
end | |
end | |
# Each task uses the configured app | |
namespace :assets do | |
desc 'precompile all assets' | |
task :precompile => [:clean] do | |
puts 'precompiling assets' | |
path = Application.settings.assets_path | |
sprockets = Application.settings.sprockets | |
manifest = Sprockets::Manifest.new sprockets, path | |
comp_filter = /application.(js|coffee|css|sass|scss)/ | |
copy_filter = /(.otf|.woff|.ttf|.svg|.eot|.png|.ico|.gif|.bmp|.jpg)/ | |
assets = [] | |
sprockets.each_logical_path do |p| | |
assets.push p if p.match comp_filter | |
sprockets[p].write_to "#{path}/#{p}" if p.match copy_filter | |
end | |
manifest.compile assets | |
end | |
desc 'cleanup old assets and leave only the currently active precompiled set' | |
task :clean do | |
puts 'cleaning up old assets' | |
sprockets = Application.settings.sprockets | |
manifest = Sprockets::Manifest.new sprockets, Application.settings.assets_path | |
manifest.clean 1 | |
end | |
desc 'delete all precompiled assets--not recommended in production' | |
task :clobber do | |
puts 'deleting all precompiled assets' | |
sprockets = Application.settings.sprockets | |
manifest = Sprockets::Manifest.new sprockets, Application.settings.assets_path | |
manifest.clobber | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment