Skip to content

Instantly share code, notes, and snippets.

@aaronlifton
Forked from skolf/Gemfile
Created April 19, 2017 17:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aaronlifton/5ad46a67ff3a2b6933f6c3b7c9f89cdc to your computer and use it in GitHub Desktop.
Save aaronlifton/5ad46a67ff3a2b6933f6c3b7c9f89cdc to your computer and use it in GitHub Desktop.
A Rake task for precompiling assets in a Sinatra app using Sprockets.
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'
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