= AssetHat Your assets are covered. With Rails' default asset caching, CSS and JS are concatenated (not even minified) the first time that bundle is requested. Not good enough. AssetHat can automatically: * Easily *minify* and *bundle* CSS and JS on deploy to reduce file sizes and HTTP requests. * Load popular third-party JS (like jQuery and Prototype) from {Google's CDN}[http://code.google.com/apis/ajaxlibs/] when in production, or from localhost in development. * Force image URLs in your CSS to use CDN subdomains, not just the current host. * Add an image's last Git[http://git-scm.com/] commit ID to its CSS URLs to bust browser caches (e.g., /images/foo.png?ab12cd34e). After setup, you can use these in your layouts and views: <%= include_css :bundle => 'application' %> # => <%= include_js :bundles => ['plugins', 'common'] %> # => # And this in your deploy script: rake asset_hat:minify Tested with Rails 2.3.x. == Installation 1. Install the gem: gem install asset_hat 2. Configure the gem: * If you're using {Bundler 0.9+}[http://github.com/carlhuda/bundler]: 1. Add to your app's Gemfile: gem 'asset_hat', '0.x.x' 2. Command-line: bundle install * If you're using Rails' config.gem, add to your app's config/environment.rb: config.gem 'asset_hat', :version => '0.x.x' 3. Add to your app's Rakefile: require 'asset_hat/tasks' == Configuration 1. Create the default config file: rake asset_hat:config 2. In your app, open the new file at config/assets.yml, and set up your CSS/JS bundles according to that file's example. 3. Minify your bundles: rake asset_hat:minify This minifies all of the CSS/JS files listed in config/assets.yml, concatenates the minified code into bundle files, and adds CDN asset hosts and cache-busting commit IDs to image URLs in your CSS. Bundles are created as new files in public/stylesheets/bundles/ and public/javascripts/bundles/. Your original CSS/JS files remain intact. 4. Set your deployment script to run rake asset_hat:minify after deploying your latest CSS/JS. This overwrites previously minified bundles, and leaves your original CSS/JS files intact. === Advanced configuration If you manage deployments with Capistrano[http://www.capify.org/], see the gem's packaged example at lib/asset_hat/capistrano.rb. Additional settings are supported in config/assets.yml: * engine: Indicates how CSS and JS are minified; omit this setting to use the defaults. By default, CSS is minified with rgrove/cssmin[http://github.com/rgrove/cssmin] (a Ruby port of Lecomte's YUI Compressor and Schlueter's PHP cssmin), and JS is minified with rgrove/jsmin[http://github.com/rgrove/jsmin] (a Ruby port of Crockford's JSMin). If the default engines cause problems by minifying too strongly, try switching each to weak. The weak engines are much safer, but don't save as many bytes. * vendors: Currently only allows for setting the jQuery version number: js: vendors: jquery: version: 1.4 In the future, this will be used for configuring the retrieval of other third-party code. == Usage In your layouts and views, instead of these: <%= stylesheet_link_tag 'reset', 'application', 'clearfix', :media => 'screen,projection', :cache => 'bundles/application' %> <%= javascript_include_tag 'plugin-1', 'plugin-2', 'plugin-3', :cache => 'bundles/application' %> Use these: <%= include_css :bundle => 'application' %> <%= include_js :bundle => 'application' %> These turn into: Have an enormous app? You can integrate gradually, using AssetHat alongside Rails' default asset caching. If your environment has config.action_controller.perform_caching set to true (e.g., in production), the layout/view will include minified bundle files. Otherwise, the separate, unminified files will be included, based on the bundle contents you define in config/assets.yml. === Advanced usage You can also include single files as expected: <%= include_css 'reset', 'application' %> <%= include_js 'plugin.min', 'application' %> Or include multiple bundles at once: <%= include_js :bundles => %w[plugins common] %> When including multiple bundles at once, this yields one or