2

我刚刚升级到 Rails 3.2,我正在使用 Amazon S3 和 Paperclip 将照片上传到我的应用程序。

在我的图片网址是:

 http://s3.amazonaws.com/dealphotos.website.com/photos/428/large/Sandisk120Drive?1334754504

现在我在本地主机上的图片网址是:

 http://s3.amazonaws.com/dealphotos.website.com/deals/photos/000/000/428/large/Sandisk120Drive?1334754504

请注意额外的 000/000 - 即使我将它们取出并访问它说的链接:

 <Error>
  <Code>AccessDenied</Code>
  <Message>Access Denied</Message>
   <RequestId>"Long String of Numbers"</RequestId>
   <HostId>
    "Gives me a really long string of letters and numbers"
   </HostId>

我的交易模式:

   has_attached_file :photo, :styles => { :small =>"268x160>", :large =>"350x250>" },
          :storage => :s3, 
          :bucket => 'dealphotos.website.com',
          :s3_credentials => {
          :access_key_id => ENV['S3_KEY_SPICY'],
          :secret_access_key => ENV['S3_SECRET_SPICY']
        }

并且图像不显示!

在此之前,我要做的就是从 Heroku 中提取所有图像和文件,然后我的所有图像和文件都将用于我的开发。这是怎么回事?

4

2 回答 2

1

您很可能使用的是最新版本的 Paperclip(版本 >= 3)。

由于这是回形针的主要版本,因此记录了与旧版本回形针的不兼容性。

一个主要的(在我的书中是好的)变化是资产的默认存储位置已经改变。

早些时候它曾经是 /system/:attachment/:id/:style/:filename.:extension (来自内存)。例如,如果您有 2 个具有相同名称的附件(公司徽标和产品徽标),这将是灾难性的。

现在回形针使用的新路径是 /system/:class/:attachment/:id_partition/:style/:filename.:extension

这意味着您的所有资产都将存储在上面指定的目录中。:id_partitions 用于使一个目录中的节点(文件/目录)的数量不超过 1000。

我希望我已经能够解释你为什么看到这个问题的原因。默认路径已更改。

你现在有两个选择——

  1. 将旧资产移动到新目录方案中的正确位置(痛苦但推荐)。

  2. 将新资产移动到旧目录结构中,并在模型的附件定义中添加 :url + :path 选项以继续使用旧方案。(见https://github.com/thoughtbot/paperclip/blob/master/UPGRADING)。

因为看起来你在新结构和旧结构中都有图像。因此,无论您决定什么,都需要将文件从一个结构移动到另一个结构。除非资产以某种方式添加了书签,否则我建议您将旧资产移动到新的目录结构中。

于 2012-07-31T09:11:44.900 回答
0

查看 CarrierWave gem 以进行文件上传。它适用于 3.2 没有任何问题 ;)

http://railscasts.com/episodes/253-carrierwave-file-uploads

于 2012-07-31T09:16:16.357 回答