Ответ 1
Да, aws-sdk не имеет AWS::S3::Base
. Я думаю, что это самый близкий эквивалент:
s3 = AWS::S3.new(:access_key_id => '****', :secret_access_key => '***')
Это проблема, с которой я сталкиваюсь в том, что после того, как я обновился до 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'
Да, aws-sdk не имеет AWS::S3::Base
. Я думаю, что это самый близкий эквивалент:
s3 = AWS::S3.new(:access_key_id => '****', :secret_access_key => '***')
Поскольку это была первая страница, которая появилась для меня в моем поиске в 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. И я подозреваю, что многие люди сталкиваются с этой проблемой, поскольку мне еще предстоит увидеть прямой ответ.
Я попробовал решение 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
.