Je viens de commencer à utiliser paperclip et j'ai un processeur personnalisé. J'ai mis le nouveau processeur dans l'emplacement correct RAILS_ROOT/lib/paperclip_processors
Mais, il ne se charge pas.Les processeurs Paperclip ne sont pas chargés dans Rails 3.0.0rc
La raison de ne pas charger, est que Rails.root
est nul au moment où est chargé. Je l'ai testé cela en mettant le code explicite dans le paperclip.rb
puts "What is Rails.root? #{Rails.root} #{Rails.root.nil?}"
if defined?(Rails.root) && Rails.root
Dir.glob(File.join(File.expand_path(Rails.root), "lib", "paperclip_processors", "*.rb")).each do |processor|
require processor
end
end
qui imprimera What is Rails.root true
. Et les processeurs ne sont jamais chargés.
Y a-t-il un correctif ou une solution pour cela? Le travail autour de maintenant est juste d'ajouter un besoin pour notre processeur. mais cela ne semble pas juste. Voici le travail autour de (notre processeur ne tar'ing), dans le modèle qui utilisera le processeur, juste besoin au sommet:
require "#{Rails.root}/lib/paperclip_processors/tar.rb"
class Ad < ActiveRecord::Base
has_attached_file :adzip,
:styles => { :targzip => {:processors => [:tar], :format => 'tgz'} }
end
lorsque vous ajoutez un 'autoload_paths' il attend que d'être la racine des modules pour les classes. Puisque vous mettez dans le répertoire paperclip, il saute cette partie du module. On attend donc juste de la classe Cropper, au lieu du module Paperclip de la classe Cropper. – christophercotton
Merci christophercotton. Pour développer son commentaire, vous devez créer un autre dossier nommé "paperclip" dans le dossier "paperclip_processors". La raison en est, comme l'indique Chris, que la hiérarchie des modules encapsulant les classes définies que vous incluez doit correspondre à la structure du dossier. Donc, puisque la classe Cropper est sous le module Paperclip, vous avez besoin de paperclip de dossier pour correspondre au module Paperclip. Et puisque vous spécifiez le chemin "lib/paperclip_processors" dans votre config, tout doit passer sous cela. –