16

这是我遇到的一个问题,在我使用较新版本的回形针升级到 AWS-SDK(而不是 aws-s3)后,我无法再调用 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'
4

3 回答 3

22

是的,aws-sdk没有AWS::S3::Base. 我认为这是最接近的等价物:

s3 = AWS::S3.new(:access_key_id => '****', :secret_access_key => '***')
于 2012-04-14T15:54:53.213 回答
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。我怀疑很多人都遇到了这个问题,因为我还没有看到一个直截了当的答案。

于 2015-06-02T19:10:44.890 回答
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"

当我在使用aws-s3启动的另一种方法中使用 的模块和方法时delayed_job,这个补丁在我的情况下没有产生问题。但这可能会在另一个用例中产生问题,因为aws-sdk' 类现在已替换为aws-s3' 模块。

于 2016-08-20T08:46:06.197 回答