AWS-SDK出现"uninitialized constant AWS::S3::Base"错误。

16

我遇到了一个问题,升级到AWS-SDK(而不是aws-s3)和更新版本的paperclip后,我无法再调用AWS :: S3 :: Base.establish_connection!

在我的代码中,无论在哪里调用

AWS::S3::Base.establish_connection!(:access_key_id => '****', :secret_access_key => '***')

我收到了这个错误...

NameError (uninitialized constant AWS::S3::Base):
    app/models/asset.rb:28:in `move_upload_from_temp_to_final_resting_place'
3个回答

22

是的,aws-sdk 没有 AWS::S3::Base。我认为这是最接近的替代品:

s3 = AWS::S3.new(:access_key_id => '****', :secret_access_key => '***')

1
这是正确的。aws-sdk维护自己的持久连接池,无需显式建立连接。 - Trevor Rowe
我最初是通过将我的所有AWS代码降级到非常早期的版本来修复它的。但是,我能够再次升级,使用这个方法,并且成功地让我的aJAX上传器和EBAY API gem都正常工作。谢谢。 - Keith Connolly
谢谢。这节省了几个小时的搜索 :) - Salil

2
作为这个问题在我的谷歌搜索中出现的第一个页面,我将评论一下我是如何解决它的。在AWS SDK 2.0.47下。
require 'rubygems'
require 'aws/s3'

include AWS::S3

AWS::S3::Base.establish_connection!(
   :access_key_id => '',
   :secret_access_key => ''
)

我只是没有引入 AWS::S3。我怀疑很多人都会遇到这个问题,因为我还没有看到一个简单明了的答案。


0

我尝试了Konstantino的解决方案,但很遗憾,对我没有起作用。使用include AWS::S3时会抛出以下异常:

TypeError: wrong argument type Class (expected Module)

以下是我解决相同问题的方法

AWS.send(:remove_const, :S3) if AWS::S3.class == Class
require Gem::Specification.find_by_name("aws-s3").gem_dir + "/lib/aws/s3.rb"

由于我在另一个使用delayed_job初始化的方法中使用了aws-s3的模块和方法,所以这个补丁在我的情况下没有问题。但是在另一种用例中,这可能会导致问题,因为aws-sdk的类现在已被aws-s3的模块替换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接