The Rails 3.1 asset pipeline has had some twists and turns lately. The community seems to me to be a little overdramatic about the state of affairs, but that’s not what this post is about.

I’m writing this post to check in on the last post I wrote about the pipeline: A Problem with the Rails 3.1 Asset Pipeline. In that post, I examined the issue when trying to change the prefix for asset paths with this:

config.assets.prefix = "/s"

It worked for me, but the asset helpers were still using the default path of “/assets”. Why was I trying to change the path? Because if I didn’t, there would be a controller name clash because I also had a controller named assets_controller.

It was a cool bug to find as I also found a useful patch for it that was never applied to the master branch and I was able to help get it committed. Since then, I haven’t actually tried out a fresh version of Rails to see if it works - until today!

I just installed Rails 3.1.1 and created a test application with model named Asset and a controller named AssetsController. After some preliminary testing in both development and production modes, I have come to the conclusion that the asset pipeline in Rails 3.1.1 is working as desired.

More specifically, I’m not experiencing any name collisions - even when I leave config.assets.prefix as the default. Check out these screenshots:

Note that the paths to these assets are as you might expect:

  <link href="/assets/application.css" media="screen" rel="stylesheet" type="text/css" />
  <script src="/assets/application.js" type="text/javascript"></script>

Additionally, the config.assets.prefix now works with the asset helpers. If I set:

config.assets.prefix = "/s"

then these helpers:

  5   <%= stylesheet_link_tag    "application" %>
  6   <%= javascript_include_tag "application" %>

produce:

FWIW, here’s a snibbet of my production.rb config:

  1 Assetstest::Application.configure do
  2   # Settings specified here will take precedence over those in config/application.rb
  3
  4   # Code is not reloaded between requests
  5   config.cache_classes = true
  6
  7   # Full error reports are disabled and caching is turned on
  8   config.consider_all_requests_local       = false
  9   config.action_controller.perform_caching = true
 10
 11   # Disable Rails's static asset server (Apache or nginx will already do this)
 12   config.serve_static_assets = true
 13
 14   # Compress JavaScripts and CSS
 15   config.assets.compress = true
 16
 17   # Don't fallback to assets pipeline if a precompiled asset is missed
 18   config.assets.compile = true
 19
 20   # Generate digests for assets URLs
 21   config.assets.digest = false
 22   config.assets.prefix = '/s'

¥