使用Paperclip + heroku + s3 ...本地上传在推送时被破坏

时间:2011-07-23 23:38:03

标签: ruby-on-rails amazon-s3 heroku paperclip

我正在建立一个拥有相当多图片的小网站> 100为当地一小群人。如果我通过本地机器上的回形针将文件上传到s3,它们工作得很好,但是当我将它推送到heroku时,那些图片会被破坏(也就是指向错误的位置)。

如果我从heroku中提取实时数据库(我将照片上传到在线应用程序的情况下,请拉动在线数据库)。这些图片无法加载到我的本地应用中。

有关如何使这项工作的任何想法?

编辑: 关于这个问题的更多澄清:我现在已经在模型中设置了这样的路径

:path => "/public/system/:attachment/:style/:id.:extension"

现在它控制了访问S3时网址的外观。但是我的本地机器将其输出为图像源:

bucket/Users/msencenb/Development/appname/public/system/pictures/7/thumb/overlook.jpg?2011

而heroku应用源代码如下:

bucket/app/public/system/pictures/7/thumb/overlook.jpg?2011

正如您所看到的,除非本地人将目录结构注入源路径,否则这非常相似。如何使用回形针进行源路径?

3 个答案:

答案 0 :(得分:2)

请参阅此博文:

http://codeglot.com/posts/68-upoading_pictures_to_apps_on_heroku

我有多个使用paperclip和s3的应用。这就是我设置它的方式:

  has_attached_file :picture, 
                     :styles => {:large => "275x450>"},
                     :storage => :s3, 
                     :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
                     :path => "appname/:attachment/:style/:id.:extension"

确保将appname替换为您应用的名称。例如您可以在heroku上访问您的应用程序的子域。

答案 1 :(得分:0)

当您使用本地计算机时,使用本地数据库中的ID将文件上载到S3,当您推送到heroku时,如果不使用本地内容更新远程数据库,则引用将是碎。

答案 2 :(得分:0)

尝试取出你在路径开头的正斜杠。

:path => "public/system/:attachment/:style/:id.:extension"

它不应该采用应用程序路径(本地上的Users / msencenb / Development / appname和Heroku上的app)。有什么东西导致它,如果采取斜线不起作用,然后尝试调查还会导致这种情况。