18

我正在尝试在 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']
    }
  }

我还为生产和开发创建了单独的存储桶,这样事情就更干净了。

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

提前致谢。

4

5 回答 5

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。

于 2013-09-18T04:24:56.787 回答
10

heroku config检查你的环境变量。

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

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

heroku config:add BUCKET_NAME=my_bucket_name

更新您的代码:

:bucket => ENV['BUCKET_NAME'],

Heroku 参考

于 2012-11-18T20:53:45.897 回答
7

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

我是开发中心文章的作者。如上所述,B 七需要在 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

于 2013-04-08T17:31:51.637 回答
3

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

于 2017-01-05T21:43:45.660 回答
0
  • 将这一行插入 schema.rb 表“instructors”
create_table "instructors" do |t|
    ...
    t.string   "bucket"
end
  • 添加到控制器@instructor[:bucket] = ENV['S3_BUCKET_NAME']
  • 运行“rake db:setup”
于 2016-08-04T08:33:10.697 回答