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:in `':初期化されていない定数AWS(NameError)
Gemfileで正しいaws SDKバージョンを定義しなかったため これは、バージョン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
の下にスコープされます=>これにより、v1とv2を並べて実行できます。
このエラーが発生し、「aws-sdk」gemがインストールされている場合、おそらくaws-sdk gemのバージョン2に意図せずにアップグレードされている可能性があります 。バージョン2は、Aws
ではなく、AWS
名前空間を使用します。これにより、バージョン1とバージョン2を同じアプリケーションで使用できます。
詳細については、こちらをご覧ください ブログ投稿 .
-v1
のaws-sdk
バージョンをインストール/使用する必要があります。単にgem 'aws-sdk'
またはrequire 'aws-sdk'
を実行すると、代わりに2.xバージョンのaws-sdk
を使用できます。
混乱を避けるため、1.xを必要とするスクリプトでは、次を使用します:
require 'aws-sdk-v1' # not 'aws-sdk'
また、2.xを必要とするスクリプトの場合、次を使用します。
gem 'aws-sdk', '~> 2'
GitHubドキュメント が示すように。
ロードパスにgemが存在しないか、不要であるかのように聞こえます。
Gemfile
のエントリは
gem 'aws-sdk'
これは暗黙的にrequire 'aws-sdk'
でアプリケーションを起動する限り、アプリケーションの初期化時にbundle exec Rails server
またはbundle exec Rails console
。
または、上記のコードがRails以外のアプリケーションにある場合は、require 'aws-sdk'
最初の行。
私はシェフのレシピでこの問題に遭遇したので、以下の応答は明らかにシェフ中心です。
Amazonは、2015年2月上旬にaws-sdkのバージョン2をリリースしました。バージョン2は、バージョン1との完全な下位互換性はありません。
それで、あなたは決断をしなければなりません-あなたはバージョン1の機能を備えたコンテンツですか、それともバージョン2の機能が欲しいですか
バージョン1に満足している場合、おそらく短期的には、バージョン1を明示的にロードする必要があります。デフォルトでは、最新バージョンを使用しているように見えるためです。これを行うには、chef_gem aws-sdkをロードするレシピでロードするバージョン属性を指定する必要があります。変更は次のようになります(おそらく、問題のクックブックの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)
クックブックのメタデータのバージョンを更新してから、クックブックをChefサーバーにアップロードします。環境内のクックブックのバージョンを更新してから、環境をChefサーバーにアップロードします。
収束後、インスタンスでgemリストを実行して、gemバージョンを確認します。
PowerShell PS C:\ Users\Administrator> gem listで| select-string aws-sdk
Linuxの場合:gem list | 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のバージョンを更新し、クックブックをアップロードし、環境ファイルのバージョンを更新し、環境をアップロードします。次のコンバージェンスの後、準備ができているはずです。
このブログ投稿には、この問題の詳細と解決策が含まれています。 http://Ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2
私は同じ問題に直面していました。ここでは、gem
を更新せずに1つの答えが機能しました。
必要な場所を変更するだけで[in th require statement in environment]
require 'aws-sdk'
に
require 'aws-sdk-v1'
私はRubyエキスパートではありませんが、以下のコマンドを実行することで同じ問題を解決しました。
インストールされたAWS gemを削除するには
gem list --no-version --local | grep aws | xargs gem uninstall -aIx
My Rubyスクリプトと互換性のあるv1 gemをインストールするには:
gem install aws-sdk -v 1.64.0
AWSが最新バージョンを使用することを推奨しているため、これは推奨される方法ではないことに同意しますが、既存のスクリプトを変更したくない人にとっては便利なはずです。