2012-04-13 27 views
13

Questo è un problema che sto avendo con il fatto che dopo l'aggiornamento ad AWS-SDK (invece di aws-s3) con le nuove versioni di paperclip Non posso più chiamare AWS :: S3 :: Base.establish_connection! affatto.costante non inizializzata AWS :: S3 :: Base via AWS-SDK

Dove mai nel mio codice che io chiamo

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

ottengo questo errore ...

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

risposta

21

Sì, aws-sdk non dispone AWS::S3::Base. Credo che questo sia l'equivalente più:

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

Questo è corretto. Aws-sdk mantiene il proprio pool di connessione permanente, senza necessità di stabilire esplicitamente una connessione. –

+0

Inizialmente l'ho risolto eseguendo il downgrade di tutto il mio codice AWS in versioni molto precoci. Ma sono stato in grado di aggiornare di nuovo, usando questo e far funzionare le cose bene sia con il mio uploader aJAX che con il mio gioiello API EBAY. Grazie. –

+0

Grazie. Ha salvato un paio d'ore di ricerche :) – Salil

2

Dato che questa è stata la prima pagina che mi è venuta per me sulla mia ricerca di Google per risolvere questo problema mi soffermerò su come sono riuscito a risolverlo. Sotto AWS SDK 2.0.47

require 'rubygems' 
require 'aws/s3' 

include AWS::S3 

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

Mi mancava semplicemente l'inclusione di AWS :: S3. E sospetto che molte persone si imbattano in questo problema perché devo ancora vedere una risposta dritta.

0

Ho provato la soluzione di Konstantino ma, sfortunatamente, non ha funzionato per me. l'utilizzo di include AWS::S3 ha generato la seguente eccezione.

TypeError: wrong argument type Class (expected Module)

Questo è come ho risolto lo stesso problema

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

come usavo aws-s3 s' moduli e metodi in un altro metodo che è stato avviato usando delayed_job, questa patch non ha creato problema nel mio caso. Ma questo può creare problemi in un altro caso d'uso poiché la classe aws-sdk è ora sostituita dal modulo aws-s3.

Problemi correlati