据说AWS未初始化。我正在使用aws-sdk-core gem。
我尝试使用aws-sdk gem,问题仍然存在。
这是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']]
当我尝试运行服务器或打开控制台时,我收到此错误:
/initializers/aws.rb:1:在`':未初始化的常量AWS(NameError)
答案 0 :(得分:109)
如果您收到此错误,并且您拥有" aws-sdk"安装了gem,你可能无意中升级到了aws-sdk gem的第2版。版本2使用Aws
命名空间,而不是AWS
。这允许在同一应用程序中使用版本1和版本2.
有关详细信息,请参阅此blog post。
答案 1 :(得分:23)
您需要安装/使用-v1
aws-sdk
版本的gem 'aws-sdk'
。只需执行require 'aws-sdk'
或aws-sdk
即可使用require 'aws-sdk-v1' # not 'aws-sdk'
的2.x版本。
为避免混淆,对于需要1.x的脚本,请使用:
gem 'aws-sdk', '~> 2'
对于需要2.x的脚本,请使用:
{{1}}
答案 2 :(得分:9)
您可能会收到此错误,因为您didn't define the correct aws sdk version in your Gemfile.在重新捆绑安装了版本1或2的旧应用时会发生这种情况。
确定要安装的版本:
gem 'aws-sdk', '~> 3'
# call sdk
Aws.<whatever>
gem 'aws-sdk', '~> 2'
# call sdk
Aws.<whatever>
# version constraint
gem 'aws-sdk', '< 2'
# or
# use the v1 gem
gem 'aws-sdk-v1'
# call sdk
AWS.<whatever>
v1的范围是AWS
,v2和v3的范围是Aws
=&gt;这允许您并排运行v1和v2。
答案 3 :(得分:6)
听起来好像载入路径中没有宝石,或者它不是必需的。
Gemfile
中的条目应为
gem 'aws-sdk'
只要您使用require 'aws-sdk'
或bundle exec rails server
启动应用,这将在应用初始化时隐式执行bundle exec rails console
。
或者,如果上述代码位于非rails应用程序中,只需将require 'aws-sdk'
放在第一行。
答案 4 :(得分:4)
我在Chef配方中遇到了这个问题,所以下面的答案肯定是以厨师为中心的。
亚马逊于2015年2月初发布了aws-sdk的第2版。版本2并不完全向后兼容版本1.
因此,您必须做出决定 - 您是否满足版本1功能,或者您是否需要版本2功能?
如果您满足版本1(可能是短期版本),则必须让Chef明确加载版本1,因为默认情况下,它似乎使用最新版本。要执行此操作,您必须在加载chef_gem aws-sdk的配方中指定要加载的版本属性。修改看起来像这样(可能在相关的cookbook的default.rb中实现):
chef_gem "aws-sdk" do
action :nothing
# Source: https://aws.amazon.com/releasenotes/Ruby?browse=1
version '1.62.0'
end.run_action(:install)
更新cookbook元数据中的版本,然后将cookbook上传到Chef服务器。更新环境中的cookbook版本,然后将环境上传到Chef服务器。
收敛后,在您的实例上运行一个gem列表以查看gem版本:
在PowerShell上 PS C:\ Users \ Administrator&gt;宝石清单| select-string aws-sdk
在Linux上: 宝石清单| grep -i aws-sdk
这些是典型的结果:
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)
请注意,最后一个指定了aws-sdk-v1。现在,您必须更新您的配方以要求旧版本的aws-sdk。改变这个:
require 'aws-sdk'
到此:
require 'aws-sdk-v1'
更新metadata.rb中的版本,上传cookbook,更新环境文件中的版本,上传环境,你应该好好接受下一次收敛。
此博客文章包含此问题的更多详细信息和解决方案: http://ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2
答案 5 :(得分:1)
我不是Ruby专家,但我通过运行以下命令解决了同样的问题。
删除已安装的AWS gems
gem list --no-version --local | grep aws | xargs gem uninstall -aIx
安装与我的Ruby脚本兼容的v1 gem:
gem install aws-sdk -v 1.64.0
我同意这不是推荐的方式,因为AWS建议使用最新版本,但这对于不想修改现有脚本的人来说非常有用。
答案 6 :(得分:1)
我遇到了同样的问题。一个答案在这里没有更新gem
。
只需更改所需位置[in th require statement in environment]
require 'aws-sdk'
到
require 'aws-sdk-v1'