It’s a rails engine that loads dragonfly gem, adding scope and id_partion storing style. It allows paperclip users to migrate to this solution when more image size flexibility is required, without losing paperclip’s file storing structure.
Dragonfly stores files using the current time, but for paperclip you can make Dragonfly to save files at /:dragonfly_scope/:id_partition
class User < ActiveRecord::Base dragonfly_for :avatar_file, :scope => 'avatars' end
User avatar files will be stored as /avatars/000/000/001/filename_original.jpg
class Image < ActiveRecord::Base dragonfly_for :file # scope defaults to 'images' end
Image files will be stored as /images/000/000/001/filename_original.jpg
# Plugin based on the edge dragonfly code gem 'dragonfly', :git => "https://github.com/markevans/dragonfly.git" gem 'dragonfly-rails', :require => 'dragonfly_rails', :git => 'https://github.com/ritxi/dragonfly-rails.git'
config.dragonfly_rails.security_key = 'mysecretkey' config.dragonfly_rails.protect_from_dos_attacks = true config.dragonfly_rails.route_path = 'media' # /media # Default is Rails.root.join('public','assets'), this will only be used on development environment. # On production environment is expected to use amazon and heroku. config.dragonfly_rails.assets_path = 'local/path/where/assets/should/be/stored'
class Image < ActiveRecord::Base dragonfly_for :file # scope defaults to 'images' end # Add file_uid field to your images table. create_table "images", :force => true do |t| ... t.column "file_uid", :string end
class User < ActiveRecord::Base dragonfly_for :avatar_file, :scope => 'avatars' end # Add the following migration to your images migration file or add a new migration adding the avatar_file_uid field create_table "users", :force => true do |t| ... t.column "avatar_file_uid", :string end
If you want to continue to use Paperclip, but retain the ability to use Dragonfly, you can pass the :with_paperclip option so Paperclip will be the master accessor and Dragonfly _uid field will be updated when Paperclip fields are updated.
class User < ActiveRecord::Base dragonfly_for :avatar_file, :scope => 'avatars', :with_paperclip => :pc_avatar has_attached_file :pc_avatar, {:styles => { :thumb => '50x50>', :original => '1200x1200>'}, :default_style => :thumb, :path => ":root_path/paperclips/:id_partition/:basename_:style.:extension", :url => "/:environment/paperclips/:id_partition/:basename_:style.:extension"} end
On your forms file_field :pc_avatar must be used:
<% form_for :user, :html => { :multipart => true } do |form| %> <%= form.file_field :pc_avatar %> <% end %>
Create a rake task with / Run the following code
User.each do |u| u.create_dragonfly_uid(:avatar_file_uid, :paper_clip_accessor) end