Подтвердить что ты не робот

Неинициализированная константа AWS:: S3:: Base через AWS-SDK

Это проблема, с которой я сталкиваюсь в том, что после того, как я обновился до 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'
4b9b3361

Ответ 1

Да, aws-sdk не имеет AWS::S3::Base. Я думаю, что это самый близкий эквивалент:

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

Ответ 2

Поскольку это была первая страница, которая появилась для меня в моем поиске в Google, чтобы решить эту проблему, я прокомментирую, как мне удалось ее решить. В разделе 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"

поскольку я использовал модули и методы aws-s3 в другом методе, который был инициирован с использованием delayed_job, этот патч не создавал проблемы в моем случае. Но это может создать проблемы в другом случае, поскольку класс aws-sdk теперь заменен модулем aws-s3.