more on attachment_fu on windows

In my previous post about attachment_fu (with rmagick) on windows, I did something sort of silly in the #create action of my controller: Windows required a little time to catch up because the file system loaded the file slower that attachemnt_fu needed it. To solve that problem, I added "sleep 5" immediately before MyObject#save.

The problem with that hack is every time I need to #save I have to remember to insert the "sleep 5" hack. That's a mistake waiting to happen. So, I moved the sleep to the model, like so:


class MyObject < ActiveRecord::Base
def before_save
sleep 5 ## <<-- pauses so Windows can catch up.
end
end

It's much more logical that this code is part of the model because the delay is fundamentally a part saving the object, not a part of responding to an action.

This also address the notion of keeping your controllers skinny and your models fat. Jamis Buck blogs very eloquently about this notion here.

1 comment:

Emmanuel Pirsch said...

Hi,

Just to let you know that you don't need a timing loop to fix this issue... doing a fsync is just what is needed to fix the issue. (see my post on the subject : http://epirsch.blogspot.com/2008/01/fixing-attachmentfu-on-windows-like.html)