From: Tom Hughes Date: Mon, 20 Feb 2012 00:38:05 +0000 (+0000) Subject: Serve up paperclip attachments in a cache friendly way X-Git-Tag: live~5791 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/f2150a94cf2eb0d518a19769fc7582ea50a5f67b?hp=a6c36b9133b27275ca5e7c45bc86e33def6fe908 Serve up paperclip attachments in a cache friendly way --- diff --git a/.gitignore b/.gitignore index 2b8b7bd68..021bc9be2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ log public/assets +public/attachments tmp .DS_Store diff --git a/app/assets/images/anon_large.png b/app/assets/images/users/images/large.png similarity index 100% rename from app/assets/images/anon_large.png rename to app/assets/images/users/images/large.png diff --git a/app/assets/images/anon_small.png b/app/assets/images/users/images/small.png similarity index 100% rename from app/assets/images/anon_small.png rename to app/assets/images/users/images/small.png diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 2d78a5bf4..ce0c5d67b 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -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 diff --git a/app/models/user.rb b/app/models/user.rb index 1f8d326d5..9a230898a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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] diff --git a/config/example.application.yml b/config/example.application.yml index 763eda8ef..420278a1f 100644 --- a/config/example.application.yml +++ b/config/example.application.yml @@ -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 diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb new file mode 100644 index 000000000..64673487a --- /dev/null +++ b/config/initializers/paperclip.rb @@ -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