ArgumentError(缺少必需:bucket选项):

时间:2014-02-13 18:22:32

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

我正在关注One Month Rails课程,并且我坚持通过Heroku将图像上传到AWS服务器。我的Github文件夹:https://github.com/phanatuan/pinteresting

Heroku日志中的错误是:

"ArgumentError (missing required :bucket option):
app/controllers/pins_controller.rb:31:in `block in create'
app/controllers/pins_controller.rb:30:in `create' " 

我知道这是很多人得到的错误。但是,当我搜索其他Stackoverflow问题和答案时,我很难找到解决方案。

非常感谢您的帮助

Tuan

3 个答案:

答案 0 :(得分:2)

我目前正在参加OneMonth Rails教程,这对我来说也是一件非常头疼的问题!

而不是遵循OMRails告诉你的内容,即:

$ heroku config:set AWS_BUCKET=BUCKET_NAME_VALUE

请改用:

$ heroku config:set S3_BUCKET_NAME=BUCKET_NAME_VALUE

然后用:

将其包起来
$ heroku run rake db:migrate
$ git push heroku master

如果您已经设置了'AWS_ACCESS_KEY_ID'和'AWS_SECRET_ACCESS_KEY',则无需重复或更改这些内容。

最终代码应如下所示:

config.paperclip_defaults = {
    :storage => :s3,
    :s3_credentials => {
      :bucket => ENV['S3_BUCKET_NAME'],
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    }
  }

答案 1 :(得分:1)

尝试在关联has_attached_file

中明确定义存储桶
class Pin < ActiveRecord::Base
    belongs_to :user

    has_attached_file :image, 
            :style => { :medium => "300x300>", :thumb => "100x100>" },
            :storage => :s3,
            :bucket  => ENV['MY_BUCKET_NAME']
    validates :image, presence: true
    validates :description, presence: true
end

更明确地说,定义所有内联配置

class Pin < ActiveRecord::Base
    belongs_to :user

    has_attached_file :image, 
            :style => { :medium => "300x300>", :thumb => "100x100>" },
            :storage => :s3,
            :bucket  => ENV['MY_BUCKET_NAME'],
            :s3_credentials => {
                    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
                    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
                },
                :s3_permissions => 'private',
                :url => ":s3_domain_url"
    validates :image, presence: true
    validates :description, presence: true
end

我在这个例子中使用了ENV vars,但你显然可以对你的配置值进行硬编码。从那里开始,然后回到将配置放入初始化器。

答案 2 :(得分:1)

我遇到了同样的问题,并通过运行来解决:

$ heroku config:set S3_BUCKET_NAME=BUCKET_NAME_VALUE

确保在production.rb文件中将名称设置为“S3”:

# Sets Paperclip to upload images to Amazon S3
  config.paperclip_defaults = {
    :storage => :s3,
    :s3_credentials => {
      :bucket => ENV['S3_BUCKET_NAME'],
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    }
  }

我也很头疼。

执行上述操作,然后添加并提交并推送到git,然后运行

git push heroku master

然后你会很高兴去。我认为你不需要做

heroku run rake db:migrate

在这种情况下,但我可能错了。我也是新手!