There's a nicely formatted gist right here, or you can read it inline below:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
unless Rails.env.development? | |
require 'fileutils' | |
output_folder = Rails.root.join("tmp", "jammit", "assets") | |
FileUtils.mkdir_p(output_folder) | |
# Heroku specific hack. | |
Jammit::Packager.class_eval do | |
def glob_files_with_heroku_hack(glob) | |
paths = glob_files_without_heroku_hack(glob) | |
# Heroku has a magical "public/javascripts/all.js" file. It is a Mystery. | |
paths.reject { |path| path =~ /javascripts\/all.js$/ } | |
end | |
alias_method_chain :glob_files, :heroku_hack | |
end | |
Jammit.package! :output_folder => output_folder | |
Rails.configuration.middleware.insert_before('Rack::Sendfile', 'Rack::Static', | |
:urls => ['/assets'], | |
:root => "#{Rails.root}/tmp/jammit") | |
end |
Yes, that large hack floating around in the middle is specifically for Heroku. If you're on another cloud service that is a little less wizardly, you can drop the class_eval block entirely and you should be good to go.
If you're wondering if the resultant files will be cached by Heroku's Varnish HTTP accelerator: yes. Rack::Static will return the fetched files as Rack::File objects, which Heroku caches.
UPDATE: if it's not obvious, this needs to go into config/initializers -- so it runs once on app start up.
No comments:
Post a Comment