Attachment_fu, Watermarks and after_save

I'm having an issue with trying to watermark an uploaded image using
attachment_fu and Rails 2.0.2.

The model looks like...

class Picture < ActiveRecord::Base
  belongs_to :gallery
  after_save :watermark_image

  has_attachment :content_type => :image,
                  :storage => :file_system,
                  :max_size => 2.megabytes,
                  :resize_to => '500x500',
                  :processor => "Rmagick",
                  :thumbnails => {
                    :large => '128x128>',
                    :small => '64x64>'

  def watermark_image
    dst ="#{RAILS_ROOT}/
    src ="#{RAILS_ROOT}/config/Logo.png").first
    result = dst.composite(src, Magick::SouthEastGravity,

The code fails with a 'Cannot read image' on the 'dst = ...' line of
the watermark_image method.

Looks like the file does not actually exist in the file system until
after 'after_save'?

removing the 'after_save' and all works, except of course no

Anyone have an ideas on how to achieve this?

thanks in advance...

kevin evans wrote:


Anyone have an ideas on how to achieve this?

thanks in advance...

Besides public_filename there are other methods within the
Attachment_fu' modified model that you can get at.. I don't remember off
the top of my head what it's name is but you can do the following to
find out


Picture.instance_methods.grep /path/

One of those methods should get you an absolute path in which your
after_save filter should work..

I haven't done this myself (other than using the alternate path methods)
and it's only the path I would take myself..



I have the exact same code as you do, and it works pefectly.

Actually, I also have 'unless self.thumbnail?' at the beginning of
that code block because I was getting my fullsize logo on top of my
thumbnails as well, but that's a different story.

I would check your paths to make sure that things are where you expect
them. 'after save' is, well, after the record/file is saved, so I
would look elsewhere for your problem. When you're looking at the
error page, are you 1000% sure that the path shown for the error page
exists and is valid?