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

我正在尝试在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 ', 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创建了单独的存储桶,因此事情变得更加清晰。

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

提前致谢。

我想你可能犯了同样的错误。 在您的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。

heroku config检查您的环境变量。

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

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

 heroku config:add BUCKET_NAME=my_bucket_name 

更新你的代码:

 :bucket => ENV['BUCKET_NAME'], 

Heroku参考

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

我是开发中心文章的作者。 正如上面提到的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
$ 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 

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

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