【问题标题】:AWS S3, Paperclip missing required :bucket optionAWS S3,缺少回形针:bucket 选项
【发布时间】:2012-11-06 19:29:14
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          Scott,如果这里有任何混淆,抱歉。

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

          【讨论】:

          • 我在本地主机上有同样的问题。已经使用我的亚马逊配置将配置添加到开发文件中。有什么问题?为什么可以错过 :bucket 选项?是因为错过了配置?
          【解决方案5】:

          heroku config 检查您的环境变量。

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

          如果没有设置,你应该设置环境变量

          heroku config:add BUCKET_NAME=my_bucket_name
          

          更新您的代码:

          :bucket => ENV['BUCKET_NAME'],
          

          Heroku reference

          【讨论】:

          • Heroku 日志显示 ArgumentError(缺少必需的 :bucket 选项):
          • Heroku 日志也显示:app/controllers/instructors_controller.rb:63:in block in update' and pp/controllers/instructors_controller.rb:62:in update'。我应该在控制器中放入什么?
          • 这对我有帮助。我忘记为存储桶设置 ENV 属性。
          猜你喜欢
          • 1970-01-01
          • 2013-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-12
          • 1970-01-01
          • 2017-04-24
          • 2018-07-06
          相关资源
          最近更新 更多