AWS Gem で「クラス変数名」エラーが発生して Passenger モジュールが失敗する

AWS Gem で「クラス変数名」エラーが発生して Passenger モジュールが失敗する

冒頭の免責事項: 私はこの質問に関係する技術に関してまったくの初心者です。しかし、Google では、何も成果が得られませんでした。

Rails アプリを本番環境にデプロイしようとしています。このアプリは WEBRick を使用すると正常に動作します。また、AWS gem を使用して S3 からデータを取得しています。

Passenger を使用して Nginx をインストールしてセットアップしました。テストしているページにアクセスすると、次のエラーが表示されます。

/home/ec2-user/.gem/ruby/2.0/gems/aws-s3-0.6.3/lib/aws/s3/extensions.rb:223: `@@{' is not allowed as a class variable name
/home/ec2-user/.gem/ruby/2.0/gems/aws-s3-0.6.3/lib/aws/s3/extensions.rb:223: syntax error, unexpected end-of-input
    unless defined? @@{:instance_writer=>false}
                      ^ (SyntaxError)

Nginx/Passenger/Who-Knows の何かが AWS コードで詰まっているのだと思いますが、WEBRick を使用するとこのエラーは発生しません。

答え1

これは、何か悪いことをしているからですaws-s3。スタック トレースのコードを見ると、クラスを開いてClasscattr_reader と cattr_writer を追加していることがわかります。ActiveSupport もこれと同じことを行い、同じ名前のメソッドを追加します。コードはありませんが、Passenger を使用すると、ActiveSupport 4.0 バージョンの/Moduleが含まれ、これが爆発するはずです。cattr_readercattr_writer

aws-s3私の解決策は、より新しく、より機能的な製品に置き換えることです。aws-sdk

関連情報