7

I have recently upgraded an app from Rails 3.0 to 3.1. I have followed any instructions I could find for enabling the asset pipeline but it always fails when in the production environment:

<%= javascript_include_tag "application" %>

gives me

<script src="/javascripts/application.js" type="text/javascript"></script>

which is missing a digest and I get the following error:

cache: [GET /javascripts/application.js] miss
Started GET "/javascripts/application.js" for 127.0.0.1 at 2011-10-03 23:31:36 +0100
ActionController::RoutingError (No route matches [GET] "/javascripts/application.js"):

I've tried variations of these settings in application.rb:

require File.expand_path('../boot', __FILE__)

#require 'rails/all'
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require *Rails.groups(:assets => %w(development test))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end


module Blog
  class Application < Rails::Application
    config.autoload_paths += %W(#{config.root}/lib)
    config.encoding = "utf-8"
    config.filter_parameters += [:password]
    config.assets.enabled = true
    config.assets.version = '1.0'
  end
end

and full production.rb (minus some comments)

Blog::Application.configure do
  config.cache_classes = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.serve_static_assets = false
  config.assets.compress = true
  config.assets.compile = false
  config.assets.digest = true
  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
end

I have ran the rake assets:precompile task.

Am I missing any obvious steps?

Edit: Some additional details:

My assets are in app/assets folder. app/assets/images, app/assets/javascripts, app/assets/stylesheets, etc.

I see my files generated in my public/assets directory with names and digests.

app/assets/javascripts/application.js does indeed compile to something like public/assets/application-6ec417a53cb2bdb949966a153a61e7b1.js They end up in the public directory.

tpower
  • 56,100
  • 19
  • 68
  • 100

2 Answers2

12

Sprockets is not getting loaded.

In an effort to remove active record in a previous version of rails (a la this question Remove ActiveRecord in Rails 3 (beta)) the require 'rails/all' was replaced by

require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"

What was missing here was sprockets/railtie

Community
  • 1
  • 1
tpower
  • 56,100
  • 19
  • 68
  • 100
  • I was using RSpec, and therefore had a similar setup with test_unit commented out. I had no idea sprockets had its own railtie. Thank you so much for this. – Olivier Lacan Oct 18 '11 at 18:09
3

See the Upgrading to Rails 3.1 Railscast

Make sure your assets are in app/assets folder. app/assets/images, app/assets/javascripts, app/assets/stylesheets, etc.

Execute rake assets:precompile

You should see files generated in your app/public/assets directory with names and digests if enabled.

app/assets/javascripts/application.js would compile to /assets/application-6ec417a53cb2bdb949966a153a61e7b1.js

If the asset is named similar to above with a digest, Production.rb should have the following config:

# Generate digests for assets URLs
config.assets.digest = true

If you look at the web page source you should see something similar to the following:

<script src="/assets/application-6ec417a53cb2bdb949966a153a61e7b1.js" type="text/javascript"></script>

Try to manually load the file by going to http://example.com//assets/application-6ec417a53cb2bdb949966a153a61e7b1.js

The file should load, if not try checking permissions and further logs.

Joey
  • 455
  • 4
  • 9
  • Thanks, I had watched the rails cast when making my changes. I have update my answer to address your suggestions. – tpower Oct 04 '11 at 11:09
  • Can you post your `application.rb` and `production.rb`? – Joey Oct 05 '11 at 18:23
  • I have added full `application.rb` and `production.rb` to the question. Full repo: https://github.com/trevorpower/trevorpower-com – tpower Oct 05 '11 at 22:24