2013-03-08 173 views
5

我不确定我是否了解Paperclip的工作原理,但据我所知,保存上传的默认位置位于/ public文件夹中。当我上传我的照片我的发展,他们正确地显示在(我可以在文件结构打开它们):回形针上传404ing

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

然而,当我做bookmark.photo.url,我得到的是这样的:

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

这里是我的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" 

我失去了一些东西在这里?不是回形针意味着为我处理这些东西,还是我在配置中遇到了问题?

UPDATE

如果我在第一个答案添加:path:url,我得到:

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

而我应该得到:

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

但是,如果我注释掉:url选项,而不是:

This, which is the default size

这一点,这是默认未找到图像大小,我得到:

enter image description here

这一点,这是相同的宽度,因为我有我的文件系统中的图像,但错误高度,并没有找到。这发生在Chrome和Safari中,并带有干净的缓存。当我转到URL时,我得到了404。我也可以确认图像在文件系统上正确存储,并可从后端查看。

回答

1

你描述的行为有点奇怪。我建议你同时设置:url和:路径的方式与此类似:

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

这意味着图像将被存储在:

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

和URL会给你这样的:

/bookmarks/bookmarks/1/thumbs.png 

请注意,您可以在“application.rb”中使用config.paperclip_defaults来完成此操作,因此您无需在每个模型上执行此操作。如果您需要不同的路径或存储空间,则可以在“production.rb”上覆盖此选项。例如:

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

这几乎工作,多亏了:style而不是:styles。除了现在我''不'' – Alfo 2013-03-08 20:46:44

+0

也许我应该只是符号链接到资产文件夹? – Alfo 2013-03-08 20:47:12

+0

你的图片被正确存储在'“#{Rails.root} /public/bookmarks/:id/:style.:extension”'? – Leito 2013-03-08 20:54:59

0

最近发生在我身上的是同样的事情。我得到一个404,因为我在/app/models/mymodel.rb

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