Ruby on rails 无法在视图中渲染图像(回形针/AWS)
在过去一天半的时间里,我一直在浏览SO的帖子,并提出了与此相关的另一个问题,但尚未找到解决方案。我无法渲染正在使用文档中指定的Ruby on rails 无法在视图中渲染图像(回形针/AWS),ruby-on-rails,amazon-web-services,amazon-s3,paperclip,Ruby On Rails,Amazon Web Services,Amazon S3,Paperclip,在过去一天半的时间里,我一直在浏览SO的帖子,并提出了与此相关的另一个问题,但尚未找到解决方案。我无法渲染正在使用文档中指定的在我的视图中正确上载到AWS的图像 在我的数据库中,所有与头像相关的字段实际上都填充有: avatar_file_name => meditation.jpg avatar_content_type => image/jpeg avatar_file_size => 109992 avatar_up
在我的视图中正确上载到AWS的图像
在我的数据库中,所有与头像相关的字段实际上都填充有:
avatar_file_name => meditation.jpg
avatar_content_type => image/jpeg
avatar_file_size => 109992
avatar_updated_at => 2016-08-04 06:48:31.361434
双击“我的亚马逊”存储桶中的图像链接,即可在浏览器中查看图像:
正如您所看到的,出于某种原因,添加了一个双文件扩展名,这是一个单独的问题(我欢迎反馈),但这似乎不是问题所在,因为我也无法在视图中使用单个文件扩展名渲染上载的图像
因此,随着图像被上传,数据库字段被填充,没有错误-我不知道为什么我不能在视图中渲染它们。我怀疑问题出在1)路径上——在我的模型中是这样的:
has_attached_file :avatar,
:styles => { medium: "300x300#", thumb: "100x100#" },
:convert_options => {
:thumb => "-quality 75 -strip" },
:s3_host_name => "s3.amazonaws.com",
:path => ":rails_root/public/:attachment/:id/:style/:filename.:extension",
:url => ":attachment/:id/:style/:filename.:extension",
:default_url => "default_img.png",
:storage => :s3,
:s3_credentials => {
:bucket => 'giving-tree-images',
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
},
:s3_permissions => {
:original => 'public-read'
}
validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/
attr_accessor :avatar_file_name, :avatar_content_type, :avatar_file_size, :avatar_updated_at
正如您所看到的,这似乎是正确的(除非我应该在我的模型中去掉:rails\u root
位?)
或者2)我需要以某种方式将图像的位置保存在一个单独的模型中(我见过其他ppl这样做,但我不确定是否需要,因为其他人似乎没有这样做-尽管他们可能没有提到他们这样做了)。然而,我读过的任何文档中都没有这一步骤
3) 我还想知道在开发过程中是否有一个单独的过程需要我去做,而不是生产过程
或者4)我正在使用rails 4.2.3,并且在评论中读到回形针不支持aws>2.00的版本-但是-指示使用2.3…所以这可能是问题所在
gem "paperclip", "~> 5.0.0"
gem 'aws-sdk', '~> 2.3'
在以下其他文章中,我还设置了一个config/asw.yml文件,如下所示:
development:
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
production:
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
并修改了myenvironments/development.rb和myenvironments/production.rb以包括:
config.paperclip_defaults = {
storage: :s3,
:s3_host_name => "s3.amazonaws.com",
s3_credentials: {
bucket: ENV.fetch('S3_BUCKET_NAME'),
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: ENV.fetch('AWS_REGION'),
}
}
…根据多个其他职位的合并建议。这很可能我不需要所有这些,所以如果有人能帮助我,我应该摆脱什么,为什么我不能在视图中渲染图像-我真的很感激,因为这是发疯 您正在将
扩展名放在:filename
之后,用于:path
和:url
——但您不应该这样做
:文件名
包括扩展名。这就是为什么你要得到两次分机
您的模型中包含以下内容:
:path=>“:rails\u root/public/:attachment/:id/:style/:filename.:extension”,
:url=>“:attachment/:id/:style/:filename.:extension”,
在删除:扩展名后,您应该具有以下功能:
:path=>“:rails\u root/public/:attachment/:id/:style/:filename”,
:url=>“:attachment/:id/:style/:filename”,
您是否尝试过不必定义:path和:url,而只使用默认路径?看看这对你是否有效?谢谢你的回复!我试着只使用:url
,然后只使用:path
,然后忽略这两个选项,运气不好
if Rails.env == "production"
# set credentials from ENV hash
S3_CREDENTIALS = { :access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'], :bucket => "giving-tree-images"}
else
# get credentials from YML file
S3_CREDENTIALS = Rails.root.join("config/s3.yml")
end
config.paperclip_defaults = {
storage: :s3,
:s3_host_name => "s3.amazonaws.com",
s3_credentials: {
bucket: ENV.fetch('S3_BUCKET_NAME'),
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: ENV.fetch('AWS_REGION'),
}
}