2013-03-08 7 views
5

Ich bin mir nicht sicher, ob ich verstehe, wie Paperclip funktioniert, aber soweit ich das beurteilen kann, befindet sich der Standardspeicherort für Uploads im Ordner/public. Wenn ich mein Foto auf meiner Entwicklung hochladen, erscheinen sie richtig in (und ich kann sie in der Dateistruktur öffnen):Paperclip uploads 404ing

/public/bookmarks/:id/:style.:extension 

Allerdings, wenn ich bookmark.photo.url tun, bekomme ich so etwas wie:

/system/bookmarks/thumbs/000/000/042/original/filename.png?1362768439 

hier ist meine bookmark.rb:

has_attached_file :photo, 
         :styles => { :medium => ["512x512>", :jpg], :thumb => ["200x200#", :jpg] } 
         :default_url => "public/bookmarks/default/:style.png", 
         :path => "assets/content/bookmarks/:id/:style.:extension" 

bin ich etwas fehlt hier? Ist Paperclip nicht für mich gedacht, oder habe ich etwas falsch in der Konfiguration?

UPDATE

Wenn ich die :path und :url in der ersten Antwort hinzufügen, erhalte ich:

<img src="/assets/bookmarks/44/original.jpg?1362775508"> 

Während ich immer sein sollte:

<img src="/bookmarks/44/original.jpg?1362775508"> 

Aber wenn ich auf Kommentar die :url Option, anstatt zu erhalten:

This, which is the default size

diese, die die Standard-not-found Bildgröße, die ich erhalten:

enter image description here

diese, die die gleiche Breite wie das Bild, das ich auf meinem Dateisystem haben, aber die falsche Höhe und nicht gefunden. Dies geschieht sowohl in Chrome als auch in Safari mit sauberen Caches. Wenn ich auf die URL gehe, bekomme ich einen 404. Ich kann auch bestätigen, dass das Bild korrekt im Dateisystem gespeichert ist und vom Backend aus sichtbar ist.

Antwort

1

Das Verhalten, das Sie beschreiben, ist ein bisschen komisch. Ich schlage vor, Sie setzen beide: url und: Pfad in ähnlicher Weise wie folgt aus:

url: '/:class/:id/:style.:extension', 
path: ':rails_root/public:url' 

Dies bedeutet, werden die Bilder gespeichert werden:

"#{Rails.root}/public/bookmarks/:id/:style.:extension" 

Und die URL geben Ihnen so etwas wie:

/bookmarks/bookmarks/1/thumbs.png 

Beachten Sie, dass Sie dies unter Verwendung von config.paperclip_defaults in "application.rb" tun können, so dass Sie es nicht für jedes Modell tun müssen. Und Sie können dies auf „production.rb“ außer Kraft setzen, wenn Sie einen anderen Pfad oder Speicher wollen, z.B .:

config.paperclip_defaults = config.paperclip_defaults.merge({ 
    storage: :s3, 
    path: 'project_name/public:url' 
    }) 
+0

, dass fast funktioniert, danke. Außer jetzt bekomme ich '' nicht '' – Alfo

+0

Vielleicht sollte ich nur symlink es in den Ordner Assets verknüpfen? – Alfo

+0

Und Ihre Bilder werden korrekt in '" # {Rails.root} /public/bookmarks/:id/:style.:extension "'? – Leito

0

Das Gleiche gilt vor kurzem mir passiert ist. Ich war immer ein 404, weil ich :style statt :styles in /app/models/mymodel.rb hatte

class Pin < ActiveRecord::Base 
    belongs_to :user 
    has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" } 
    validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/ 
end