結構ハマった。
こんな症状↓
Rails 2.3.4でattachment_fuを使ってデータベースのbinaryフィールド(PostgreSQLのbytea)に画像を登録しようとすると、なぜかsizeが記録されずvalidates_as_attachmentを通らない。Model#save前にModel#valid?を呼ぶとうまくいったりする。しかし登録された画像データは内容が半分くらい欠落した破損データになっている。
データの壊れ方がテキストモードのままファイルopenしてるっぽいような気がしたので、試しにLinuxで同じことをしてみたら問題なかった。やはりどうやらWindowsだけの問題みたい。
このへんに情報あった。↓
で、結局、environment.rbの最後に次のようなコードを追加することで修正問題回避することができた。
# Fixing attachment_fu on Windows
class Tempfile
def size
if @tmpfile
@tmpfile.fsync # added this line
@tmpfile.flush
@tmpfile.stat.size
else
0
end
end
end
module Technoweenie
module AttachmentFu
module InstanceMethods
def temp_data
save_attachment? ? File.open(temp_path, "rb"){|f| f.read} : nil
end
end
end
end