我不确定我是否理解Paperclip是如何工作的,但据我所知,保存上传的默认位置在/ public文件夹中。当我在开发中上传我的照片时,它们正确显示(我可以在文件结构中打开它们):
/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"
我在这里遗漏了什么吗? Paperclip是不是意味着为我处理这些东西,或者我在配置中出错了什么?
更新
如果我在第一个答案中添加:path
和:url
,我会得到:
<img src="/assets/bookmarks/44/original.jpg?1362775508">
我应该得到:
<img src="/bookmarks/44/original.jpg?1362775508">
但是,如果我注释掉:url
选项,而不是获取:
这是默认的未找到的图像尺寸,我得到:
这个,它与我文件系统上的图像宽度相同,但是高度错误,没有找到。 Chrome和Safari都会使用干净的缓存。当我转到URL时,我得到一个404.我还可以确认图像是在文件系统上正确存储的,并且可以从后端查看。
答案 0 :(得分:1)
你描述的行为有点奇怪。我建议你设置两个:url和:path以类似的方式:
url: '/:class/:id/:style.:extension',
path: ':rails_root/public:url'
这意味着图像将存储在:
"#{Rails.root}/public/bookmarks/:id/:style.:extension"
网址会为您提供以下内容:
/bookmarks/bookmarks/1/thumbs.png
请注意,您可以使用&#34; application.rb&#34;中的config.paperclip_defaults
执行此操作,因此您不必在每个型号上执行此操作。你可以在&#34; production.rb&#34;上覆盖它。如果你想要一个不同的路径或存储,例如:
config.paperclip_defaults = config.paperclip_defaults.merge({
storage: :s3,
path: 'project_name/public:url'
})
答案 1 :(得分:0)
最近我发生了同样的事情。我得到的是404,因为我在:style
中有:styles
而不是/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