Paperclip上传404ing

Alf*_*lfo 5 file-upload ruby-on-rails paperclip ruby-on-rails-3

我不确定我是否理解Paperclip是如何工作的,但据我所知,保存上传的默认位置在/ public文件夹中.当我在开发中上传我的照片时,它们会正确显示(我可以在文件结构中打开它们):

/public/bookmarks/:id/:style.:extension
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时bookmark.photo.url,我会得到类似的东西:

/system/bookmarks/thumbs/000/000/042/original/filename.png?1362768439
Run Code Online (Sandbox Code Playgroud)

这是我的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"
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?Paperclip不是要为我处理这些东西,还是我在配置中出错?

UPDATE

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

<img src="/assets/bookmarks/44/original.jpg?1362775508">
Run Code Online (Sandbox Code Playgroud)

我应该得到:

<img src="/bookmarks/44/original.jpg?1362775508">
Run Code Online (Sandbox Code Playgroud)

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

这是默认大小

这个,这是默认的未找到的图像大小,我得到:

在此输入图像描述

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

Leo*_*lán 1

你所描述的行为有点奇怪。我建议您以类似于以下的方式设置 :url 和 :path:

url: '/:class/:id/:style.:extension',
path: ':rails_root/public:url'
Run Code Online (Sandbox Code Playgroud)

这意味着图像将存储在:

"#{Rails.root}/public/bookmarks/:id/:style.:extension"
Run Code Online (Sandbox Code Playgroud)

URL 将为您提供类似以下内容:

/bookmarks/bookmarks/1/thumbs.png
Run Code Online (Sandbox Code Playgroud)

请注意,您可以使用config.paperclip_defaults“application.rb”来执行此操作,因此您不必在每个模型上执行此操作。如果您想要不同的路径或存储,您可以在“生产.rb”上覆盖它,例如:

  config.paperclip_defaults = config.paperclip_defaults.merge({
    storage: :s3,
    path: 'project_name/public:url'
  })
Run Code Online (Sandbox Code Playgroud)