首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么AWS::S3::S3Object抱怨未定义的方法删除?

为什么AWS::S3::S3Object抱怨未定义的方法删除?
EN

Stack Overflow用户
提问于 2013-11-18 02:19:19
回答 1查看 3.7K关注 0票数 1

Gemfile:

创业板‘’

创业板'aws-s3‘

在调用删除视频时,在视频模型中也调用此方法:

代码语言:javascript
复制
 def remove_encoded_video
    unless output_url.blank?
      AWS::S3.new(
        :access_key_id     => zencoder_setting["s3_output"]["access_key_id"],
        :secret_access_key => zencoder_setting["s3_output"]["secret_access_key"]
      )
      AWS::S3::S3Object.delete(File.basename(output_url), zencoder_setting["s3_output"]["bucket"])    
      AWS::S3::S3Object.delete("/thumbnails_#{self.id}/frame_0000.png", zencoder_setting["s3_output"]["bucket"])
    end
  end

这两项:

代码语言:javascript
复制
AWS::S3::S3Object.delete(File.basename(output_url), zencoder_setting["s3_output"]["bucket"])

AWS::S3::S3Object.delete("/thumbnails_#{self.id}/frame_0000.png", zencoder_setting["s3_output"]["bucket"])

引起的

NoMethodError in VideosController#destroy

AWS::S3::S3Object:Class的未定义方法“删除”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-18 03:57:30

我不相信这两个宝石‘aws’和'aws-s3‘是兼容的。你应该只使用其中之一。

AWS::S3::S3Object的AWS版本在类级别上没有delete方法,仅在实例级别。因此,您需要首先创建S3Object,然后使用‘aws’调用S3Object上的delete。

假设您的代码是从aws-s3的文档中提取的,如果您将gem 'aws-sdk'从Gemfile中删除并重新打包,它可能会工作。当然,如果您在其他地方使用‘aws’,这可能会破坏应用程序中的其他代码。

更新:

您可以获得并删除S3Object,如下所示:

代码语言:javascript
复制
s3 = AWS::S3.new(:access_key_id => '...',
                 :secret_access_key => '...')

bucket = s3.buckets[bucket_name]
object = bucket.objects[key]
object.delete

其中,bucket_name是桶的名称,其中键是要删除的对象的键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20039002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档