通过AWS-SDK进行未初始化的常量AWS :: S3 :: Base

时间:2012-04-13 08:02:20

标签: ruby amazon-s3 amazon-web-services paperclip amazon

这是我遇到的一个问题,在我使用新的回形针版本升级到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'

3 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分: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。我怀疑很多人都在讨论这个问题,因为我还没有看到直接的回答。

答案 2 :(得分: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模块替换。