rails aws ruby-on-rails amazon-web-services ruby-on-rails-4 amazon-s3 aws-sdk-ruby

ruby-on-rails - rails - gem aws sdk s3



Error "constante no inicializada AWS(NameError)" (7)

Se dice que AWS no está inicializado. Soy usign la gema aws-sdk-core.

Intenté usar la gema aws-sdk en su lugar, y el problema todavía estaba allí.

Este es el archivo initializers / aws.rb:

AWS.config(:access_key_id => ENV[''AWS_ACCESS_KEY_ID''], :secret_access_key => ENV[''AWS_SECRET_ACCESS_KEY'']) s3 = AWS::S3.new AVATAR_BUCKET = s3.buckets[ENV[''AVATAR_BUCKET_NAME'']]

Cuando intento ejecutar el servidor o abrir la consola obtengo este error:

/initializers/aws.rb:1:in `'': constante no inicializada AWS (NameError)


Encontré este problema en una receta de chef, por lo que la respuesta a continuación es decididamente centrada en el chef.

Amazon lanzó la versión 2 de aws-sdk a principios de febrero de 2015. La versión 2 no es totalmente compatible con la versión 1.

Por lo tanto, debe tomar una decisión: ¿está contento con la funcionalidad de la versión 1 o desea la funcionalidad de la versión 2?

Si está satisfecho con la versión 1, quizás a corto plazo, es necesario que Chef cargue explícitamente la versión 1, ya que, de forma predeterminada, parece que usa la última versión. Para hacerlo, debe especificar el atributo de versión para cargar en la receta que carga chef_gem aws-sdk. La modificación se ve así (probablemente implementada en un default.rb para el libro de cocina en cuestión):

chef_gem "aws-sdk" do action :nothing # Source: https://aws.amazon.com/releasenotes/Ruby?browse=1 version ''1.62.0'' end.run_action(:install)

Actualice la versión en los metadatos del libro de cocina, luego suba el libro de cocina a su servidor Chef. Actualice la versión del libro de cocina en el entorno y luego cargue el entorno en su servidor Chef.

Después de la convergencia, ejecute una lista de gemas en su instancia para ver las versiones de gemas:

En PowerShell PS C: / Users / Administrator> gem list | seleccionar-cadena aws-sdk

En Linux: lista de gemas | grep -i aws-sdk

Estos son resultados típicos:

aws-sdk (2.0.27, 1.62.0) aws-sdk-core (2.0.27) aws-sdk-resources (2.0.27) aws-sdk-v1 (1.62.0)

Tenga en cuenta que el último especifica aws-sdk-v1. Ahora, debe actualizar su receta para requerir la versión anterior de aws-sdk. Cambia esto:

require ''aws-sdk''

a esto:

require ''aws-sdk-v1''

Actualice la versión en metadata.rb, cargue el libro de cocina, actualice la versión en el archivo de entorno, cargue el entorno y será bueno que vaya después de la próxima convergencia.

Esta publicación de blog contiene más detalles y soluciones a este problema: http://ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2


Es posible que obtenga este error porque no definió la versión sws correcta de aws en su Gemfile. Esto puede suceder al volver a combinar aplicaciones antiguas con la versión 1 o 2 instalada.

Asegúrese de la versión que desea instalar:

aws-sdk versión 3

gem ''aws-sdk'', ''~> 3'' # in your scripts # call sdk Aws.<whatever>

aws-sdk versión 2

gem ''aws-sdk'', ''~> 2'' # in your scripts # call sdk Aws.<whatever>

aws-sdk versión 1

# version constraint gem ''aws-sdk'', ''< 2'' # or # use the v1 gem gem ''aws-sdk-v1'' # in your scripts # call sdk AWS.<whatever>

v1 tiene un alcance bajo AWS y v2 y v3 con Aws => que le permite ejecutar v1 y v2 uno al lado del otro.


Estaba enfrentando el mismo problema. Una respuesta funcionó aquí sin actualizar la gem .

Simplemente cambie donde sea requerido [in th require statement in environment]

require ''aws-sdk''

a

require ''aws-sdk-v1''


Necesita instalar / usar la versión -v1 de aws-sdk . Simplemente haciendo gem ''aws-sdk'' o require ''aws-sdk'' puede usar la versión 2.x de aws-sdk lugar.

Para evitar confusiones , para los scripts que requieren 1.x, use:

require ''aws-sdk-v1'' # not ''aws-sdk''

Y para las secuencias de comandos que requieren 2.x, use:

gem ''aws-sdk'', ''~> 2''

como lo indica la documentación de GitHub .


No soy un experto en Ruby, pero he resuelto el mismo problema ejecutando los comandos a continuación.

Para eliminar las gemas AWS instaladas

gem list --no-version --local | grep aws | xargs gem uninstall -aIx

Para instalar la joya v1 que era compatible con mi script de Ruby:

gem install aws-sdk -v 1.64.0

Acepto que esta no es la manera recomendada ya que AWS recomienda usar la última versión, pero esto debería ser útil para alguien que no desea modificar sus scripts existentes.


Parece que la gema no está presente en la ruta de carga o no se necesita.

La entrada en tu Gemfile debe ser

gem ''aws-sdk''

Esto requerirá implícitamente require ''aws-sdk'' medida que la aplicación se inicialice, siempre y cuando inicie la aplicación con el bundle exec rails server o la bundle exec rails console .

De forma alternativa, si el código anterior estaba en una aplicación que no es de rieles, simplemente require ''aws-sdk'' en la primera línea.


Si recibe este error y tiene instalada la gema "aws-sdk", probablemente se haya actualizado a la versión 2 de la gema aws-sdk involuntariamente . La versión 2 usa el espacio de nombres Aws , no AWS . Esto permite que la versión 1 y la versión 2 se usen en la misma aplicación.

Vea esta publicación en el blog para más información.