能够使用Heroku在我的生产环境中将文件上传到Amazon s3,但无法在我的开发环境中执行此操作。以下是目前的情况
Development.rb
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']
}
}
在遵循this S.O. Post的建议后,我在配置目录中创建了一个文件application.yml
,其中包含以下代码:
AWS_ACCESS_KEY_ID: "***"
AWS_SECRET_ACCESS_KEY: "***"
AWS_BUCKET: "themoderntrunk"
我没有改变我的设计模型
has_attached_file :photo, :styles => { :thumbnail => "80x80#",
:small => "150x150>"
}
当我现在上传文件时,我收到此错误
missing required :bucket option
我见过很多人都有同样的问题,但没有一个答案能够解决我的问题。任何指导都将得到真正的赞赏。感谢。
答案 0 :(得分:1)
相反,这个特殊问题通常是使用Ruby的规范云服务库Fog来解决的。
# Gemfile
gem 'fog'
运行bundle install
,然后按如下所示修改配置文件:
# config/environments/development.rb
Paperclip::Attachment.default_options.merge!(
:storage => :fog,
:fog_credentials => {
:provider => 'AWS',
:aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
},
:fog_directory => ENV['AWS_BUCKET'],
:bucket => ENV['AWS_BUCKET']
)
重新启动服务器以重新加载环境 - 上传应该有效。
<强>更新强>:
在重新阅读您的问题后,我注意到您要传递一个名为ENV['S3_BUCKET_NAME']
的环境全局,但您实际传递的变量名为ENV['AWS_BUCKET']
。我怀疑这就是missing required :bucket option
被抛出的原因。重命名变量可能解决原始问题:
# config/environments/development.rb
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV['AWS_BUCKET'], # Matches global declaration in `application.yml`
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}