【问题标题】:uninitialized constant AWS::S3::Base via AWS-SDK未初始化的常量 AWS::S3::Base 通过 AWS-SDK
【发布时间】:2012-04-25 14:31:46
【问题描述】:

这是我遇到的一个问题,在我使用较新版本的回形针升级到 AWS-SDK(而不是 aws-s3)后,我无法再调用 AWS::S3::Base .建立连接!一点也不。

我在代码中的任何地方调用

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'

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这是正确的。 aws-sdk 维护自己的持久连接池,无需显式建立连接。
    • 我最初通过将所有 AWS 代码降级到非常早期的版本来修复它。但是我能够再次升级,使用它并让我的 aJAX 上传器和我的 EBAY API gem 都能很好地工作。谢谢。
    • 谢谢。它节省了几个小时的搜索时间:)
    【解决方案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。而且我怀疑很多人都遇到了这个问题,因为我还没有看到一个直截了当的答案。

    【讨论】:

      【解决方案3】:

      我尝试了 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 的模块。

      【讨论】:

        猜你喜欢
        • 2018-03-08
        • 2016-03-01
        • 2016-09-08
        • 1970-01-01
        • 2018-02-19
        • 2015-04-14
        • 2014-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多