2012-04-13 26 views
13

To jest problem z tym, że po aktualizacji do AWS-SDK (zamiast aws-s3) z nowszą wersją (wersjami) spinacz nie mogę już wywoływać AWS :: S3 :: Base.establish_connection! w ogóle.niezaimitializowana stała AWS :: S3 :: Baza przez AWS-SDK

Jeżeli kiedykolwiek w moim kodu Wzywam

AWS::S3::Base.establish_connection!(:access_key_id => '****', :secret_access_key => '***') 

otrzymuję ten błąd ...

NameError (uninitialized constant AWS::S3::Base): 
    app/models/asset.rb:28:in `move_upload_from_temp_to_final_resting_place' 

Odpowiedz

21

Tak, aws-sdk nie posiada AWS::S3::Base. Myślę, że to jest najbliższy odpowiednik:

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

To się zgadza. Aws-sdk utrzymuje swoją własną pulę połączeń, bez potrzeby jawnego ustanawiania połączenia. –

+0

Pierwotnie naprawiłem to, obniżając cały mój kod AWS do bardzo wczesnych wersji. Ale udało mi się dokonać aktualizacji, używając tego i sprawić, że wszystko będzie działać dobrze zarówno z moim programem do przesyłania plików aJAX, jak iz moją aplikacją API EBAY. Dzięki. –

+0

Dziękuję. To uratowało kilka godzin poszukiwań :) – Salil

2

Ponieważ była to pierwsza strona, która pojawiła się dla mnie na mojej wyszukiwarki Google, aby rozwiązać ten problem będę komentować tego, jak udało mi się go rozwiązać. Pod AWS SDK 2.0.47

require 'rubygems' 
require 'aws/s3' 

include AWS::S3 

AWS::S3::Base.establish_connection!(
    :access_key_id => '', 
    :secret_access_key => '' 
) 

Po prostu brakowało mi włącznika AWS :: S3. I podejrzewam, że wiele osób boryka się z tym problemem, ponieważ nie widziałem jeszcze prostej odpowiedzi.

0

Próbowałem rozwiązania Konstantino, ale niestety to nie działa dla mnie. użycie include AWS::S3 spowodowało następujący wyjątek.

TypeError: wrong argument type Class (expected Module)

ten sposób, że rozwiązać ten sam problem

AWS.send(:remove_const, :S3) if AWS::S3.class == Class 
require Gem::Specification.find_by_name("aws-s3").gem_dir + "/lib/aws/s3.rb" 

jak używał aws-s3 jest moduły i sposoby, w inny sposób, który został zainicjowany za pomocą delayed_job ten plaster nie tworzyć problem w moim przypadku. Ale może to powodować problemy w innym przypadku użycia, ponieważ klasa aws-sdk została teraz zastąpiona przez moduł .

Powiązane problemy