I encountered this problem while working with attachment_fu.
Simply stated, follow the attachment_fu README to set up the minimum
"Mugshot" model, controller, and views.
mugshot.rb
class Mugshot < ActiveRecord::Base
has_attachment :content_type => :image,
:storage => :file_system,
:size => 0..3.megabytes,
:resize_to => ''640x480>'',
:thumbnails => { :thumb =>
''100x100>'' }
validates_as_attachment
end
..._create_mugshots.rb:
class CreateMugshots < ActiveRecord::Migration
def self.up
create_table :mugshots do |t|
t.column :parent_id, :integer
t.column :content_type, :string
t.column :filename, :string
t.column :thumbnail, :string
t.column :size, :integer
t.column :width, :integer
t.column :height, :integer
t.timestamps
end
end
def self.down
drop_table :mugshots
end
end
mugshots_controller.rb:
def index
@mugshots = Mugshot.find(:all,
:conditions => {:thumbnail => nil})
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @mugshots }
end
end
views/mugshots/index.html.erb:
<h1>Most Wanted</h1>
<% for mugshot in @mugshots -%>
<%= link_to image_tag(mugshot.public_filename(:thumb)),
mugshot.public_filename %>
<% end -%>
<p>
<%= link_to(''New shot'', { :action =>
''new'' }) %>
</p>
I added two images, "DSCN0925.jpg" and "DSCN0913.JPG"
through the
application. The unix file command for these images tells me:
DSCN0913.JPG: JPEG image data, EXIF standard 2.2
DSCN0925.jpg: JPEG image data, EXIF standard 2.2
And, using script/console, Mugshot.find(:all) gives:
>> Mugshot.find(:all)
=> [#<Mugshot id: 1, parent_id: nil, content_type: "image/jpeg",
filename: "DSCN0925.jpg", thumbnail: nil, size: 818302, width: 640,
height: 479, created_at: "2009-04-29 19:01:17", updated_at:
"2009-04-29 19:01:17">, #<Mugshot id: 2, parent_id: 1,
content_type:
"image/jpeg", filename: "DSCN0925_thumb.jpg", thumbnail:
"thumb",
size: 75300, width: 100, height: 75, created_at: "2009-04-29
19:01:18", updated_at: "2009-04-29 19:01:18">, #<Mugshot
id: 3,
parent_id: nil, content_type: "image/jpeg", filename:
"DSCN0913.JPG",
thumbnail: nil, size: 833312, width: 640, height: 479, created_at:
"2009-04-29 19:01:48", updated_at: "2009-04-29
19:01:48">, #<Mugshot
id: 4, parent_id: 3, content_type: "image/jpeg", filename:
"DSCN0913_thumb.JPG", thumbnail: "thumb", size: 162513,
width: 100,
height: 75, created_at: "2009-04-29 19:01:49", updated_at:
"2009-04-29
19:01:49">]
NOTE: content_type for all four records is image/jpeg.
Observing the headers associated with a load of the view/mugshots/
index.html.erb view with Live HTTP gives:
----------------------------------------------------------
http://localhost:3000/mugshots/0000/0001/DSCN0925_thumb.jpg?1241031678
GET /mugshots/0000/0001/DSCN0925_thumb.jpg?1241031678 HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:
1.9.0.10) Gecko/2009042315 Firefox/3.0.10
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost:3000/mugshots
Cookie: _mugshots_session=BAh7CDo...
If-Modified-Since: Wed, 29 Apr 2009 19:01:18 GMT
Cache-Control: max-age=0
HTTP/1.x 200 OK
Last-Modified: Wed, 29 Apr 2009 19:01:18 GMT
Content-Type: image/jpeg
Content-Length: 2780
Connection: keep-alive
Server: thin 1.0.0 codename That''s What She Said
----------------------------------------------------------
http://localhost:3000/mugshots/0000/0003/DSCN0913_thumb.JPG?1241031709
GET /mugshots/0000/0003/DSCN0913_thumb.JPG?1241031709 HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:
1.9.0.10) Gecko/2009042315 Firefox/3.0.10
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost:3000/mugshots
Cookie: _mugshots_session=BAh7CDo...
If-Modified-Since: Wed, 29 Apr 2009 19:01:49 GMT
Cache-Control: max-age=0
HTTP/1.x 200 OK
Last-Modified: Wed, 29 Apr 2009 19:01:49 GMT
Content-Type: text/plain
Content-Length: 4812
Connection: keep-alive
Server: thin 1.0.0 codename That''s What She Said
----------------------------------------------------------
NOTE: the content_type associated with .jpg is image/jpeg
NOTE: the content_type associated with .JPG is text/plain
This difference causes Firefox to identify all .JPG files as "JPEG
Picture" rather than "image/jpeg...", resulting in different
behavior
in the browser when the "link_to" link is followed.
----------------------------------------------------------
Here are my test environments
Ruby 1.8.7 (2008-08-11 patchlevel 72) [powerpc-darwin9.6.0]
Rails 2.3.2
Webrick
Thin 1.0.0
Mongrel 1.1.5
rmagick 2.9.1
ImageMagick 6.5.1
attachment_fu - current version
paperclip - current version
and
Ruby 1.9.2dev (2009-04-25 trunk 23281) [powerpc-darwin9.6.0]
Rails 2.3.2
Webrick
Thin 1.0.0
rmagick 2.9.1
ImageMagick 6.5.1
attachment_fu - current version
paperclip - current version
Browsers used were:
Firefox - v2.0.0.9, v3.0.8, v3.0.10
Opera - v9.6.4
Safari - v3.2.1
IE - v5
Of these only Firefox (all versions) demonstrates the problem. I have
been working with the firefox folks over the last week however and
they have been able to convince me the problem is not theirs.
In all cases I''m running in the development environment on a single
machine - OSX 10.5.6 ppc.
So as near as I can tell, when I browse my Rails app at localhost:3000
the data path is, with the exception of the *magick and browser, all
in the RoR world. I''m really not clear how the whole Ruby/Rails/Rack/
[Thin, Webrick, Mongrel] thing hangs together so I can''t get any
closer to whose problem it is, really.
----------------------------------------------------------
I''m particularly troubled by the following:
1) attachment_fu and paperclip have no problem identifying both .jpg
and .JPG as image/jpeg content_type and this information is stored in
the database.
2) the Unix file command, looking at the files magic numbers,
correctly identify both files as the same type - JPEG EXIF 2.2.
3) The "from" end image in the view''s link_to displays
correctly. In
fact, I''ve checked this by using the full image at the from end
pointing at itself on the to end.
4) Somewhere between the "click the link" and the "display the
image"
code is looking at the file name extension and assigning the
content_type (incorrectly) based on case.
Is this a bug or a truly bizarre feature?
rick