我正在使用回形针和amazons3为我的网站存储图像。在开发模式下没有s3,一切都正常工作,但当我尝试使用s3时,它显示的是图像的标题,而不是图像。我已经复制了heroku指南中的内容https://devcenter.heroku.com/articles/paperclip-s3.
这是gemfile
gem 'paperclip'
gem 'aws-sdk', '~> 2.3'
这在类配置文件中的profile.rb中
has_attached_file :avatar,
:styles => { :medium => "300x300>", :thumb => "100x100>" },
:default_url => ":style/missing.jpg"
validates_attachment_content_type :avatar, :content_type => /Aimage/.*Z/
这个正在生产中。rb
config.paperclip_defaults = {
storage: :s3,
s3_host_name: "s3-#{ENV['AWS_REGION']}.amazonaws.com",
:s3_protocol => :https,
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'),
}
}
查看
<%= image_tag @user.profile.avatar.url(:medium) %>
我已经复制了heroku指南,并添加了主机名和s3协议位。这里怎么了?
我遵循了heroku指南,在开发环境中使用回形针成功地将用户图像上传到S3,我也可以在用户的个人资料中看到该图像。
我的Gemfile:
gem 'paperclip'
gem 'aws-sdk-s3'
我的开发.rb
config.paperclip_defaults = {
storage: :s3,
s3_host_name: "s3.#{ENV['AWS_REGION']}.amazonaws.com",
s3_protocol: :https,
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'),
}
}
您有这个(这可能导致了问题):
s3_host_name: "s3-#{ENV['AWS_REGION']}.amazonaws.com",
我有这个(s3后面的一个点):
s3_host_name: "s3.#{ENV['AWS_REGION']}.amazonaws.com",
我的用户.rb与您的相同
has_attached_file :avatar,
:styles => { :medium => "300x300>", :thumb => "100x100>" },
:default_url => ":style/missing.jpg"
# Validate the attached image is image/jpg, image/png, etc
validates_attachment_content_type :avatar, :content_type => /Aimage/.*Z/
我的show.html.erb
<%= image_tag @user.avatar.url(:medium) %>
我使用的是rails 5.2版本,上面的代码对我有效。还要检查你的S3 bucket是否有对对象的公共访问权限。