Paperclip,S3,Heroku:缺少图像
长时间观看,第一次问问。 我搜索过这个主题,但不相信我找到了答案。
我有一个有图像的Post模型。 我正在使用Paperclip gem,保存到Amazon S3,并在Heroku上托管。
文件上传表单工作正常,因为我可以看到图像被发送到我的S3存储桶。
问题在于,图像实际上并未在生产中显示。
这是我的模特:
class Post " } validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/
这是我的config / production.rb:
# Required for Paperclip / AWS config.paperclip_defaults = { :storage => :s3, :s3_credentials => { :bucket => ENV['S3_BUCKET_NAME'], :access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] } }
这是我的show.html.haml文件:
.clearfix .post_image_description = image_tag @post.image.url(:medium) .description= simple_format(@post.address) .description= simple_format(@post.description)
@post.image.url
应该不够吗? 正确路由到图像可能会遗漏什么?
这是我在拉Heroku Logs
时看到的:
2015-06-23T15:38:26.181383+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/images/medium/missing.png"):
作为参考,这是我的项目存储库: https : //github.com/lucasvocos/pitstop
如果问题中还有其他内容,请告诉我。 因为这是我第一次问。 感谢大家。
您需要为s3 bucket变量设置heroku环境变量:
heroku config:set S3_BUCKET_NAME='Your Bucket Name' heroku config:set AWS_ACCESS_KEY_ID='Your AWS ID' heroku config:set AWS_SECRET_ACCESS_KEY='Your AWS Secrete Key'
我有一个类似的问题,上传工作但显示器显示链接断开。 我检查了链接的源,它没有指向S3上显示的图像的URL。 我必须将主机名添加到我的paperclip配置中
config.paperclip_defaults = { :storage => :s3, :s3_host_name => 's3-us-west-2.amazonaws.com', :s3_credentials => { :bucket => ENV['S3_BUCKET_NAME'], :access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] } }
你必须在\ public \ images \ medium中提交missing.png。(确保存在\ public \ images \ medium \ missing.png,然后提交)。 在您上传某些有效图像之前,此图像是默认图像。
但是,也建议在模型中定义url,如下所示:
has_attached_file :image, styles: { medium: "700x500#", small: "350x250>" }, :url => '/:class/:attachment/:id/:style_:basename.:extension'