Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Familiar asset handling for those stuck on Rails 2

Merge pull request #10 from brentvatne/master

Bump sprockets version and fix specs
latest commit 67b432c538
@grosser authored

Rails 2 Asset pipeline

Familiar asset handling for those stuck on Rails 2.

  • sprockets/coffee/sass etc goodness
  • application.js?time for development
  • application-MD5.js for production (and development without, read from public/assets/manifest.json)
  • old asset versions can stay around during deploys
  • converter for jammit asset.yml
  • no forced monkey-patching, everything is opt-in

Example application


rake assets:precompile
rake assets:clean
rake assets:remove_old      # Keeps current + 2 older versions in public/assets
rake assets:convert_jammit  # reads config/assets.yml and converts packs into `app/assets/<type>/<pack>.js` with `//= require <dependency>`
With ViewHelpers included you can:
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<%= image_tag "foo.jpg" %> <-- will go to public if you set Rails2AssetPipeline::ViewHelpers.ignored_folders = ["images"]
From good old public <%= javascript_include_tag "/javascripts/application.js" %>
Just a path: <%= asset_path "application.js" %>


gem install rails2_asset_pipeline

# config/environment.rb
config.gem "rails2_asset_pipeline"

# Gemfile (if you have one)
gem "rails2_asset_pipeline"

group :development do
  gem "coffee-script", :require => false # need coffee ?
  gem "sass", :require => false # need sass ?
  gem "sprockets-sass", :require => false


Here you can do configuration of sprockets.

  • loaded in rake assets:precompile without the rails environment (to enable compiling/deploying without development environment)
  • configure sprockets
  • require sprockets extensions like sprockets/sass
# config/initializers/rails2_asset_pipeline.rb
if Rails.env.development? # dynamic asset compilation needs these
  require 'coffee-script' # need coffee ?
  require 'sprockets/sass' # need sass ?
  autoload :Sass, 'sass' # autoload when used via rake assets:precompile
  require 'sprockets/source_url' # sprockets-source_url for debugable assets in chrome

# Use a different path for assets (as in config.assets.prefix from ")
# Rails2AssetPipeline.prefix = 'static_assets'

Rails2AssetPipeline.setup do |sprockets|
  # ... additional config ...

# let image_tag still go to public/images
require 'rails2_asset_pipeline/view_helpers'
Rails2AssetPipeline::ViewHelpers.ignored_folders = ["images"]

Optional: remove unnecessary Sass middleware + monkey-patches

# config/environment.rb

module Sass; RAILS_LOADED = true; end # prevent sass middleware + monkeypatches -> all handled by rails2_asset_pipeline (verify via: rake middleware | grep Sass) do


# Rakefile
  require "rails2_asset_pipeline/tasks"
rescue LoadError
  puts "rails2_asset_pipeline is not installed, you probably should run 'rake gems:install' or 'bundle install'."

Dynamic assets for development

Setup a so development has dynamic assets

# we need to protect against multiple includes of the Rails environment (trust me)
require './config/environment' if !defined?(Rails) || !Rails.initialized?


map '/' do
  use Rails::Rack::LogTailer unless Rails.env.test?
  # use Rails::Rack::Debugger unless Rails.env.test?
  use Rails::Rack::Static

View helpers

# app/helpers/application_helper.rb
require 'rails2_asset_pipeline/view_helpers'
module ApplicationHelper
  include Rails2AssetPipeline::ViewHelpers

Static code

You can also use Rails2AssetPipeline::ViewHelpers.asset_path("application.js")

Fast tests

To not compile assets during testing you can overwrite the manifest.

# spec/fixtures/empty_manifest.json
{"assets": {}, "files": {}}

# spec/spec_helper.rb
Rails2AssetPipeline.manifest = Rails.root.join("spec/fixtures/empty_manifest.json")

Images vs CSS

/* application.css */
  background: url('ok.gif');

/* application.css.erb ... not recommended but possible ... */
  background-image:url(<%= asset_data_uri 'ok.gif' %>);


  • add sass to your gems for sass parsing
  • add sprockets-sass to your gems for sass @import support


  • read config from Rails 3 style config.assets
  • sprockets 2.8 wants to use manifest-digest.json, had to overwrite that, find out if nonpstatic manifest makes sense for us and potentially have an option to turn it on



Michael Grosser
License: MIT
Build Status

Something went wrong with that request. Please try again.