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

时间:2012-11-18 20:30:27

标签: 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'

说明中未提及有关在控制器中进行更改的任何内容。我看到一些例子告诉我要输入类似的内容:

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

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

在我的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']
    }
  }

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

有什么想法吗?我比较新,这应该很容易。

提前致谢。

5 个答案:

答案 0 :(得分: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']
  }
}

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

答案 1 :(得分:10)

执行heroku config检查您的环境变量。

通常情况下,它们都是大写字母,并且有下划线而不是空格。

如果未设置,则应使用

设置环境变量
heroku config:add BUCKET_NAME=my_bucket_name

更新您的代码:

:bucket => ENV['BUCKET_NAME'],

Heroku reference

答案 2 :(得分:7)

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

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

Heroku最近更新了他们的文档(https://devcenter.heroku.com/articles/config-vars#example),setadd更优先。


$ 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

答案 3 :(得分:3)

确保在使用环境变量设置值时重新启动您选择的CLI。不要像我一样,使用ENV变量正确设置Paperclip和AWS,然后在Google上浪费大量时间,通过退出并重新打开终端来解决问题。

答案 4 :(得分:0)

  • 在此行中插入schema.rb表“教师”
create_table "instructors" do |t|
    ...
    t.string   "bucket"
end
  • 添加到控制器@instructor[:bucket] = ENV['S3_BUCKET_NAME']
  • 运行“rake db:setup”