Paperclip上传404ing

时间:2013-03-08 18:52:08

标签: ruby-on-rails ruby-on-rails-3 file-upload paperclip

我不确定我是否理解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选项,而不是获取:

This, which is the default size

这是默认的未找到的图像尺寸,我得到:

enter image description here

这个,它与我文件系统上的图像宽度相同,但是高度错误,没有找到。 Chrome和Safari都会使用干净的缓存。当我转到URL时,我得到一个404.我还可以确认图像是在文件系统上正确存储的,并且可以从后端查看。

2 个答案:

答案 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