Permalink
Browse files

Serve up paperclip attachments in a cache friendly way

  • Loading branch information...
1 parent a6c36b9 commit f2150a94cf2eb0d518a19769fc7582ea50a5f67b @tomhughes tomhughes committed Feb 20, 2012
View
@@ -1,4 +1,5 @@
log
public/assets
+public/attachments
tmp
.DS_Store
@@ -106,21 +106,13 @@ def describe_location(lat, lon, zoom = nil, language = nil)
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
@@ -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]
@@ -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
@@ -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

0 comments on commit f2150a9

Please sign in to comment.