2012-04-13 9 views
13

Este es un problema que tengo con el hecho de que después de actualizar a AWS-SDK (en lugar de aws-s3) con las versiones más nuevas de clip ya no puedo llamar a AWS :: S3 :: Base.establish_connection! en absoluto.constante no inicializada AWS :: S3 :: Base a través de AWS-SDK

Donde quiera que en mi código que llamo

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

consigo este error ...

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

Respuesta

21

Sí, aws-sdk no tiene AWS::S3::Base. Creo que esto es el equivalente más cercano:

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

Esto es correcto. El aws-sdk mantiene su propio grupo de conexiones persistentes, sin necesidad de establecer explícitamente una conexión. –

+0

Lo arreglé originalmente al degradar todo mi código AWS a versiones muy antiguas. Pero pude actualizar de nuevo, usar esto y hacer que las cosas funcionen bien tanto con mi cargador aJAX como con mi joya API EBAY. Gracias. –

+0

Gracias. Se guardó un par de horas de búsqueda :) – Salil

2

Como se trataba de la primera página que apareció para mí en mi búsqueda de google para resolver este problema voy a comentar sobre cómo me las arreglé para resolverlo. Bajo la AWS SDK 2.0.47

require 'rubygems' 
require 'aws/s3' 

include AWS::S3 

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

Simplemente estaba perdiendo la AWS incluyen :: S3. Y sospecho que muchas personas se están topando con este tema, ya que aún no he visto una respuesta directa.

0

Intenté la solución Konstantino pero, por desgracia, no funcionó para mí. usando include AWS::S3 lanzó la siguiente excepción.

TypeError: wrong argument type Class (expected Module)

esto es cómo i resuelto el mismo 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" 

como yo estaba usando aws-s3 's módulos y métodos en otro método que se inició utilizando delayed_job, este parche no creó cuestión en mi caso. Pero esto puede crear problemas en otro caso de uso ya que la clase aws-sdk ahora se reemplaza con el módulo aws-s3.

Cuestiones relacionadas