2012-04-13 6 views
13

Ceci est un problème que j'ai avec le fait qu'après avoir mis à niveau vers AWS-SDK (au lieu de aws-s3) avec la plus récente version de (s) de paperclip Je ne peux plus appeler AWS :: S3 :: Base.establish_connection! du tout.Constante non initialisée AWS :: S3 :: Base via AWS-SDK

Où jamais dans mon code que j'appelle

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

Je reçois cette erreur ...

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

Répondre

21

Oui, aws-sdk n'a pas AWS::S3::Base. Je pense que c'est le plus proche équivalent:

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

Ceci est correct. Aws-sdk gère son propre pool de connexions persistantes, pas besoin d'établir explicitement une connexion. –

+0

Je l'ai d'abord corrigé en déclassant tout mon code AWS en versions très anciennes. Mais j'ai été en mesure de mettre à jour à nouveau, en utilisant ceci et de faire fonctionner les choses bien avec mon uploader aJAX et ma gemme de l'API EBAY. Merci. –

+0

Merci. Il a sauvé quelques heures de recherche :) – Salil

2

Comme ce fut la première page qui a surgi pour moi sur ma recherche google pour résoudre ce problème, je vais commenter sur la façon dont j'ai réussi à le résoudre. Sous AWS SDK 2.0.47

require 'rubygems' 
require 'aws/s3' 

include AWS::S3 

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

Je manquais simplement l'include AWS :: S3. Et je soupçonne que beaucoup de gens se heurtent à ce problème car je n'ai pas encore vu une réponse directe.

0

J'ai essayé la solution Konstantino mais, malheureusement, cela n'a pas fonctionné pour moi. en utilisant include AWS::S3 a jeté l'exception suivante.

TypeError: wrong argument type Class (expected Module)

Voilà comment je résolu le même problème

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

que j'utilisais des modules et des méthodes de aws-s3 dans une autre méthode qui a été lancée à l'aide delayed_job, ce patch n'a pas créé question dans mon cas. Mais cela peut créer des problèmes dans un autre cas d'utilisation car la classe aws-sdk est maintenant remplacée par le module aws-s3.