Erreur “uninitialized constant AWS (NameError)”
C'est à dire que AWS est non initialisée. Je suis avec aws-sdk-core gem.
J'ai essayé d'utiliser aws-sdk gem au lieu de cela, et le problème était toujours là.
C'est le initializers/aws.rb fichier:
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']]
Quand j'ai essayer de lancer le serveur ou de l'ouverture de la console, j'obtiens cette erreur:
/initializers/aws.rb:1:`: uninitialized constant AWS (NameError)
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir cette erreur, parce que vous ne pas définir la bonne aws sdk version dans votre Gemfile. Cela peut se produire, tout en re-groupement vieux applications avec la version 1 ou 2 installé.
Assurez-vous que la version que vous souhaitez installer:
aws sdk de la version 3
aws sdk de la version 2
aws sdk de la version 1
v1 est étendu sous
AWS
et v2 et v3 visée en vertuAws
=> Qui vous permet d'exécuter la v1 et la v2 de l'autre côté.Si vous recevez cette erreur, et vous avez le "aws sdk" gem installé, vous avez probablement mis à niveau vers la version 2 de l'aws sdk gem involontairement. La Version 2 utilise le
Aws
espace de noms, pasAWS
. Cela permet à la version 1 et la version 2 pour être utilisés dans la même application.Voir ce post de blog pour plus d'informations.
gem install aws-sdk-v1 and
besoin aws-adk-v1`.Vous avez besoin pour installer/utiliser le
-v1
version deaws-sdk
. Simplement en faisantgem 'aws-sdk'
ourequire 'aws-sdk'
peut utiliser les 2.x version deaws-sdk
à la place.Pour éviter toute confusion, pour les scripts qui nécessitent 1.x, utilisez:
Et pour les scripts qui ont besoin de 2.x, utilisez:
comme le GitHub documentation indique.
require
ligne). Un bon rappel de mise à jour des gemmes avec prudence.Ça sonne comme si le gem n'est pas présent dans votre chemin de chargement ou il n'est pas nécessaire.
L'entrée dans votre
Gemfile
devrait êtreCe sera implicitement un
require 'aws-sdk'
que l'application initialise, aussi longtemps que vous démarrez l'application avecbundle exec rails server
oubundle exec rails console
.Par ailleurs, si le code ci-dessus a été dans un non-application rails, il suffit de placer
require 'aws-sdk'
sur la première ligne.J'ai rencontré ce problème dans une recette Chef, de sorte que la réponse ci-dessous est un véritable Chef-centrique.
Amazon publié la version 2 de l'aws sdk au début de février 2015. La Version 2 n'est pas entièrement compatible avec la version 1.
Donc, vous devez prendre une décision - êtes-vous satisfait avec la version 1 de fonctionnalités, ou voulez-vous la version 2 de la fonctionnalité?
Si vous êtes satisfait de la version 1, peut-être pour le court terme, il est nécessaire d'avoir le Chef de charger explicitement la version 1, car par défaut, il apparaît à l'utilisation de la dernière version. Pour ce faire, vous devez spécifier l'attribut de version à charger dans la recette qui charge chef_gem aws sdk. La modification ressemble à ça (probablement mis en œuvre dans un défaut.rb pour le livre de recettes en question):
Mise à jour de la version dans le livre de métadonnées, puis télécharger le livre de recettes de votre Chef de serveur. Mise à jour le livre de cuisine de la version dans l'environnement, puis télécharger l'environnement de votre Chef de serveur.
Après convergence, exécuter un joyau de la liste sur votre instance pour voir le bijou versions:
Sur PowerShell
PS C:\Users\Administrator> gem list | select-string aws sdk
Sur Linux:
gem list | grep -i aws sdk
Voici les résultats:
Noter que le dernier spécifie aws-sdk-v1. Maintenant, vous devez mettre à jour votre recette à exiger de l'ancienne version de aws sdk. Modifiez ce qui suit:
à ceci:
Mise à jour de la version dans les métadonnées.rb, télécharger le livre de recettes, mise à jour de la version dans le fichier d'environnement, de télécharger l'environnement, et vous devriez être bon d'aller au bout la prochaine convergence.
Ce blog contient plus de détails et des solutions à ce problème:
http://ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2
Je ne suis pas un expert Ruby, mais j'ai résolu le même problème en exécutant les commandes ci-dessous.
Pour supprimer le installé AWS gemmes
Pour installer la v1 gem qui était compatible avec mon script Ruby:
Je suis d'accord ce n'est pas la méthode recommandée comme AWS recommande d'utiliser la version la plus récente, mais cela devrait être utile pour quelqu'un qui ne veulent pas modifier leurs scripts.
J'ai été confrontée au même problème. Une réponse travaillé ici sans mettre à jour le
gem
.Simplement changer à chaque fois que nécessaire
[in th require statement in environment]
à