-
-
Save aaronlifton/5ad46a67ff3a2b6933f6c3b7c9f89cdc 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