无法在开发中将文件上传到Amazon s3

时间:2014-01-05 19:51:35

标签: ruby-on-rails ruby amazon-s3 ruby-on-rails-4

能够使用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

我见过很多人都有同样的问题,但没有一个答案能够解决我的问题。任何指导都将得到真正的赞赏。感谢。

1 个答案:

答案 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']
  }
}