2012-04-13 3 views
13

Это проблема, с которой я столкнулся с тем, что после того, как я обновился до AWS-SDK (вместо aws-s3) с более новой версией paperclip Я больше не могу звонить AWS :: S3 :: Base.establish_connection! вообще.неинициализированная константа AWS :: S3 :: Base через AWS-SDK

Где когда-либо в моем коде я называю

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' 

ответ

21

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

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

Это правильно. Aws-sdk поддерживает свой собственный постоянный пул соединений, не нужно явно устанавливать соединение. –

+0

Первоначально я исправил его, понизив весь мой код AWS до самых ранних версий. Но я смог снова обновиться, используя это и хорошо работая с моим загрузчиком aJAX и моей жемчужиной EBAY API. Благодарю. –

+0

Спасибо. Это спасло пару часов поиска :) – Salil

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. И я подозреваю, что многие люди сталкиваются с этой проблемой, поскольку мне еще предстоит увидеть прямой ответ.

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 «s модули и методы в другом методе, который был инициирован с помощью delayed_job, этот патч не создает проблемы в моем случае. Но это может создать проблемы в другом случае, так как класс aws-sdk теперь заменен модулем aws-s3.

Смежные вопросы