Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 30th, 2012  |  syntax: None  |  size: 1.31 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. desc "cache assets"
  2. task :cache_assets => :environment do
  3.   BUCKET = 'my-bucket-name'
  4.   PATHS = ['public/javascripts/all.js']
  5.  
  6.   s3_yml = "#{Rails.root}/config/s3.yml"
  7.   s3_config = YAML.load_file(s3_yml)
  8.  
  9.   puts "-----> caching assets..."
  10.   PATHS.each do |path|
  11.     FileUtils.rm(path) if File.exist?(path)
  12.   end
  13.  
  14.   ActionController::Base.perform_caching = true
  15.  
  16.   session = ActionDispatch::Integration::Session.new(Rails.application)
  17.   session.get('/')
  18.   session.follow_redirect!
  19.  
  20.   AWS::S3::Base.establish_connection!(
  21.     :access_key_id => s3_config['production']['access_key_id'],
  22.     :secret_access_key => s3_config['production']['secret_access_key']
  23.   )
  24.  
  25.   PATHS.each do |f|
  26.     next if File.directory?(f)
  27.  
  28.     key = f.gsub(/\.\/public/, '')
  29.     puts " -> %s" % key
  30.  
  31.     puts "   -> uglify..."
  32.     ugly_file = Uglifier.new.compile(File.read(f))
  33.  
  34.     puts "   -> gzip..."
  35.     gzip_file = StringIO.open('', 'w')
  36.     gz = Zlib::GzipWriter.new(gzip_file)
  37.     gz.write(ugly_file)
  38.     gz.close
  39.  
  40.     puts "   -> upload to S3..."
  41.     AWS::S3::S3Object.store(
  42.       key, gzip_file.string, BUCKET,
  43.       :access => :public_read, 'Cache-Control' => 'max-age=315360000', 'Content-Encoding' => 'gzip'
  44.     )
  45.    
  46.     puts "   -> add config var"
  47.     system("heroku config:add all_js_cache_id=#{ugly_file.hash.abs}")
  48.   end
  49.  
  50.   puts "-----> done"
  51. end