attachment.rb
12.2 KB
-
Added fingerprinting support · 2cdeb39a
Leverage browser caching and proxy caching by setting far future Expires headers and changing filenames when file contents change. This can make your web app faster for users and also reduce your bandwidth costs. By adding the column :avatar_fingerprint to our db table and including :fingerprint in the attachment filename, we ensure the filename will change whenever the file contents do. has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :path => "users/:id/:attachment/:fingerprint-:style.:extension", :storage => :s3, :s3_headers => {'Expires' => 1.year.from_now.httpdate}, :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", :include_updated_timestamp => false This enables us to set far future expire headers so that browsers don't need to check for a newer version. If a change does occur, say because a user uploads a new avatar, the new filename will be rendered in your html and the cached version will be ignored. The example above will set Expires headers in S3. If you're using local storage you can configure your webserver to do something similar. We disable the timestamped query string because some proxies refuse to cache items with query strings. For more info on optimizing for caching: http://code.google.com/speed/page-speed/docs/caching.html
Mike Bailey committed