Serve up paperclip attachments in a cache friendly way

This commit is contained in:
Tom Hughes 2012-02-20 00:38:05 +00:00
parent a6c36b9133
commit f2150a94cf
7 changed files with 27 additions and 14 deletions

1
.gitignore vendored
View file

@ -1,4 +1,5 @@
log
public/assets
public/attachments
tmp
.DS_Store

View file

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 917 B

After

Width:  |  Height:  |  Size: 917 B

Before After
Before After

View file

@ -106,21 +106,13 @@ module ApplicationHelper
def user_image(user, options = {})
options[:class] ||= "user_image"
if user.image.file?
image_tag user.image.url, options
else
image_tag "anon_large.png", options
end
image_tag user.image.url(:large), options
end
def user_thumbnail(user, options = {})
options[:class] ||= "user_thumbnail"
if user.image.file?
image_tag user.image.url, options
else
image_tag "anon_small.png", options
end
image_tag user.image.url(:small), options
end
def preferred_editor

View file

@ -44,9 +44,9 @@ class User < ActiveRecord::Base
after_initialize :set_creation_time
before_save :encrypt_password
has_attached_file :image, :styles => { :thumb => "100x100>" },
:path => "#{ATTACHMENTS_DIR}/user/image/:id/:filename",
:url => "/user/image/:id/:filename"
has_attached_file :image,
:default_url => "/assets/:class/:attachment/:style.png",
:styles => { :large => "100x100>", :small => "50x50>" }
def self.authenticate(options)
if options[:username] and options[:password]

View file

@ -56,7 +56,7 @@ defaults: &defaults
gpx_trace_dir: "/home/osm/traces"
gpx_image_dir: "/home/osm/images"
# Location of data for attachments
attachments_dir: ":rails_root/public"
attachments_dir: ":rails_root/public/attachments"
# Log file to use
#log_path: ""
# List of memcache servers to use for caching

View file

@ -0,0 +1,20 @@
module Paperclip
class AssetUrlGenerator < UrlGenerator
include Sprockets::Helpers::IsolatedHelper
include Sprockets::Helpers::RailsHelper
def for(style_name, options)
url = super(style_name, options)
if url =~ /^\/assets\/(.*)$/
asset_path($1)
else
url
end
end
end
end
Paperclip::Attachment.default_options[:url] = "/attachments/:class/:attachment/:id_partition/:style/:fingerprint.:extension"
Paperclip::Attachment.default_options[:path] = "#{ATTACHMENTS_DIR}/:class/:attachment/:id_partition/:style/:fingerprint.:extension"
Paperclip::Attachment.default_options[:url_generator] = Paperclip::AssetUrlGenerator