AWS S3,Paperclip缺少必需:bucket选项

Sco*_* S. 18 ruby-on-rails heroku amazon-s3

我正在尝试在Heroku上使用Paperclip和SWS S3来让用户上传图像.

我没有将凭据存储在yml文件中.我按照Heroku页面上的说明操作:https: //devcenter.heroku.com/articles/paperclip-s3

但是,当我尝试运行我的应用程序并上传图像时,我收到此消息:

missing required :bucket option
Rails.root: /Users/scottsipiora/Sites/clycss

Application Trace | Framework Trace | Full Trace
app/controllers/instructors_controller.rb:63:in `block in update'
app/controllers/instructors_controller.rb:62:in `update'
Run Code Online (Sandbox Code Playgroud)

说明中没有提到有关在我的控制器中进行更改的任何内容.我看到一些例子告诉我要加入类似的东西:

在我的模型中,我有以下代码:

class Instructor < ActiveRecord::Base
  attr_accessible :bio, :hometown, :name, :school, :sort_order, :started_sailing, :started_teaching, :photo
  has_attached_file :photo, styles: {
    thumb: '100x100>',
    square: '200x200#',
    medium: '300x300>'
  }
end
Run Code Online (Sandbox Code Playgroud)

在我的production.rb中我(显然用模拟凭证替换了我的真实凭证):

  config.paperclip_defaults = {
    :storage => :s3,
    :s3_credentials => {
      :bucket => ENV['bucket name'],
      :access_key_id => ENV['key_id'],
      :secret_access_key => ENV['access_key']
    }
  }
Run Code Online (Sandbox Code Playgroud)

我还为Production和Dev创建了单独的存储桶,因此事情更清晰.

有任何想法吗?我比较新,这应该很容易.

提前致谢.

小智 19

我想你可能犯了同样的错误.在您的production.rb文件中,不要编辑文本以添加特定的S3密钥.只需按照教程中列出的方式直接复制粘贴文本即可.

#production.rb
config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['AWS_BUCKET'],
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,按照开发人员中心文章的作者所述设置环境变量AWS_BUCKET,AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY.


B S*_*ven 10

heroku config检查您的环境变量.

通常它们都是帽子并且有下垫而不是空格.

如果未设置,则应使用设置环境变量

heroku config:add BUCKET_NAME=my_bucket_name
Run Code Online (Sandbox Code Playgroud)

更新你的代码:

:bucket => ENV['BUCKET_NAME'],
Run Code Online (Sandbox Code Playgroud)

Heroku参考


har*_*low 7

斯科特,对不起,如果这里有任何混淆.

我是开发中心文章的作者.正如上面提到的B Seven所述,需要在Heroku应用程序上设置AWS Config Vars.

Heroku最近更新了他们的文档(https://devcenter.heroku.com/articles/config-vars#example),set并且优先于add未来.


$ heroku config:set AWS_BUCKET=your_bucket_name
$ heroku config:set AWS_ACCESS_KEY_ID=your_access_key_id
$ heroku config:set AWS_SECRET_ACCESS_KEY=your_secret_access_key