4
votes

Trying to get the hang of deploying a rails 3.1 App ...

Based on what I've read, I've put the following code in my deploy.rb:

before "deploy:symlink", "assets:precompile"

namespace :assets do
  desc "Compile assets"
  task :precompile, :roles => :app do
    run "cd #{release_path} && rake RAILS_ENV=#{rails_env} assets:precompile"
  end
end

But to tell you the truth, I can't notice any difference with or without it. Is there something I'm missing here?

EDIT* found the answer:

http://spreecommerce.com/blog

To pre-compile assets for production you would normally execute the following rake task (on the production server).

$ bundle exec rake assets:precompile This would write all the assets to the public/assets directory while including an MD5 fingerprint in the filename for added caching benefits.

NOTE: In production all references to assets from views using image_tag, asset_path, javascript_include_tag, etc. will automatically include this fingerprint in the file name so the correct version will be served.

1

1 Answers

0
votes

There is configuration to do, but it should be correctly set by default. Get in your config/application.rb and see if you find this:

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
...
config.assets.enabled = true

You should also have those in your production.rb file:

# Compress JavaScripts and CSS
config.assets.compress = true

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false

This should be set that way. Is it?