我有一个使用回形针附加照片的Rails 4应用程序。我的db / seeds.rb文件为我的Person模型添加了一些照片,如下所示:
Person.create(:first_name => 'Jon', :last_name => 'Snow',
:photo => File.open("#{Rails.root}/app/assets/images/jon-snow.png))
在我的app / models / person.rb文件中,我将:照片作为回形针附件进行裁剪和调整大小:
class Person < ActiveRecord::Base
has_attached_file :photo,
:styles => { :medium => "256x256#", :small => "64x64#", :tiny => "24x24#" },
:default_url => :set_default_avatar,
:url => "/assets/photos/:id/:style/:basename.:extension",
:path => ":rails_root/public/assets/photos/:id/:style/:basename.:extension"
validates_attachment_size :photo, :less_than => 5.megabytes
validates_attachment_content_type :photo, :content_type => ['image/jpeg', 'image/png']
我的问题是,当我尝试将此部署到heroku(使用Cedar堆栈)然后为数据库播种时,图像都会出现故障。但是,在我的本地计算机上,一切都很好。
在heroku上生成的损坏的图像标记可能类似于:
<img alt="Jon Snow" src="/assets/photos/21/small/jon-snow.png?1386825683">
有谁知道为什么这个链接会在heroku上而不是在我的计算机上中断?我知道heroku正在生成调整大小的照片,因为heroku控制台会输出与此帖子类似的内容:Seed images in heroku with paperclip。
但是,它将它们放入公共/资产而不是公共/资产/照片/:id /:style /:basename。:扩展名,如控制器指定的那样。
我已经尝试过关注帖子提及的内容以及运行:
heroku run rake assets:precompile
和其他一些事情,但没有任何作用。任何帮助将不胜感激。
答案 0 :(得分:1)
问题与我在此回答中所述的相同How to use paperclip with rails and how does it work in deployment?
legacy Bamboo stack有read-only file system,因此您无法在文件系统上书写。
在new Cedar stack中,文件系统不再是只读的,因此上传不会失败。但是,您应该继续使用AWS或任何其他外部存储,因为Heroku会将您编译的应用程序分布在多台计算机上,并且无法保证图像可以从其他请求中看到。他们称之为ephemeral filesystem。
换句话说,您应该继续使用AWS或Heroku文件系统之外的任何其他存储。
答案 1 :(得分:0)
slug的文件系统是只读的,这意味着你不能 动态写入文件系统以进行半永久存储。该 不支持以下类型的行为:缓存页面中的 公共目录将上载的资产保存到本地磁盘(例如,使用 attachment_fu或回形针)
使用AWS S3