Plugin Acts As Attachment wyrzuca błąd undefined method

Witam,
Próbowałem przetestować plugin acts_as_attachment i podążałem za tą instrukcją: http://weblog.techno-weenie.net/articles/acts_as_attachment.
Niestety w wyniku dostaję błąd:

NoMethodError in PhotosController#create
undefined method `after_attachment_saved_callback_chain’ for #Class:0x7f4fffd0a808

/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/base.rb:1667:in method_missing' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:272:insend’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:272:in run_callbacks' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:298:incallback’
vendor/plugins/acts_as_attachment/lib/technoweenie/acts_as_attachment/instance_methods.rb:146:in create_attachment_thumbnails' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:173:insend’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:173:in evaluate_method' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:161:incall’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:93:in run' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:92:ineach’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:92:in send' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:92:inrun’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:272:in run_callbacks' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:298:incallback’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:208:in create_or_update' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/base.rb:2206:insave_without_validation!’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/validations.rb:911:in save_without_dirty!' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/dirty.rb:83:insave_without_transactions!’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:110:in save!' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/database_statements.rb:66:intransaction’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:79:in transaction' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:98:intransaction’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:110:in save!' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:118:inrollback_active_record_state!’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:110:in save!' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/validations.rb:882:increate!’
app/controllers/photos_controller.rb:15:in `create’

Posiadam ruby 1.8.6 , Rails 2.1.0 i serwer Mongrel.

Hey, acts_as_attachment jest troche stary i moze nie dzialac z 2.1, polecam attachment_fu.

Dzięki. Tak zrobiłem i teraz mam inny problem. Jeżeli w modelu attachment’u ustawię skalowanie lub miniaturki (:resize_to i :thumbnails) to ImageScience, przy próbie upload’u, wyrzuca błąd: [code]ArgumentError in PhotosController#create
invalid geometry format

vendor/plugins/attachment_fu/lib/geometry.rb:36:in from_s' vendor/plugins/attachment_fu/lib/geometry.rb:90:in/’
vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/image_science_processor.rb:54:in resize_image' vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb:421:inresize_image_or_thumbnail!’
vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/image_science_processor.rb:24:in process_attachment' vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/image_science_processor.rb:14:inwith_image’
vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/image_science_processor.rb:14:in with_image' vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb:357:inwith_image’
vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/image_science_processor.rb:21:in process_attachment' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:173:insend’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:173:in evaluate_method' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:161:incall’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:93:in run' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:92:ineach’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:92:in send' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:92:inrun’
vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb:443:in run_callbacks' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:298:incallback’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:269:in valid?' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/validations.rb:910:insave_without_dirty!’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/dirty.rb:83:in save_without_transactions!' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:110:insave!’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/database_statements.rb:66:in transaction' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:79:intransaction’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:98:in transaction' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:110:insave!’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:118:in rollback_active_record_state!' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:110:insave!’
vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb:254:in create_or_update_thumbnail' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/object/misc.rb:28:inreturning’
vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb:246:in create_or_update_thumbnail' vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb:407:inafter_process_attachment’
vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb:407:in each' vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb:407:inafter_process_attachment’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:173:in send' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:173:inevaluate_method’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:161:in call' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:93:inrun’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:92:in each' /usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:92:insend’
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:92:in run' vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb:443:inrun_callbacks’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:298:in callback' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:208:increate_or_update’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/base.rb:2200:in save_without_validation' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/validations.rb:901:insave_without_dirty’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/dirty.rb:75:in save_without_transactions' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:106:insave’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/database_statements.rb:66:in transaction' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:79:intransaction’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:98:in transaction' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:106:insave’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:118:in rollback_active_record_state!' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:106:insave’
app/controllers/photos_controller.rb:19:in create' app/controllers/photos_controller.rb:18:increate’[/code]

Fajnie, że wrzuciłeś stack trace ale wrzuć jeszcze te linijki gdzie definiujesz has_attachment w modelu.

[code]# app/models/images.rb
class Images < ActiveRecord::Base
has_attachment :content_type => :image,
:storage => :file_system,
:min_size => 0,
:max_size => 1.megabytes,
:resize_to => ‘960×640’,
:thumbnails => { :medium => ‘480×320’}

Override the default AttachmentFu error messages.

def validate
if filename.nil?
errors.add_to_base(“You must choose a file to upload”)
else
# Images should only be GIF, JPEG, or PNG
enum = attachment_options[:content_type]
unless enum.nil? || enum.include?(send(:content_type))
errors.add_to_base(“You can only upload images (GIF, JPEG, or PNG)”)
end
# Images should be less than UPLOAD_LIMIT MB.
enum = attachment_options[:size]
unless enum.nil? || enum.include?(send(:size))
msg = “Images should be smaller than 1 MB”
errors.add_to_base(msg)
end
end
end
end[/code]
Oto część pliku vendor/plugins/attachment_fu/lib/geometry.rb pluginu, która się wywala:

[code] # Construct an object from a geometry string
RE = /\A(\d*)(?:x(\d+))?([-+]\d+)?([-+]\d+)?([%!<>@]?)\Z/

def self.from_s(str)
raise(ArgumentError, “no geometry string specified”) unless str

if m = RE.match(str)
  new(m[1].to_i, m[2].to_i, m[3].to_i, m[4].to_i, RFLAGS[m[5]])
else
  raise ArgumentError, "invalid geometry format"
end

end[/code]

Ok. Dzięki, już wiem o co chodzi. Zamiast ‘×’ w opcjach has_attachment powinno być ‘x’. Uwielbiam to :o