O módulo do passageiro falha no AWS Gem com o erro 'Nome da variável de classe'

O módulo do passageiro falha no AWS Gem com o erro 'Nome da variável de classe'

Isenção de responsabilidade de abertura: sou totalmente novato nas tecnologias envolvidas nesta questão. Mas os Googles, ela não rendeu o fruto.

Estou tentando implantar um aplicativo Rails em produção. Este aplicativo funciona bem usando WEBRick. Também estou usando a gem AWS para recuperar dados do S3.

Eu instalei e configurei o Nginx com Passenger. Quando acesso a página que estou testando, recebo este erro:

/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)

Acho que algo sobre Nginx/Passenger/Who-Knows está engasgado com o código AWS, mas, novamente, usando WEBRick, não recebo esse erro.

Responder1

É devido ao fato de aws-s3estar fazendo algo mau. Se você observar o código nesse rastreamento de pilha, verá que eles abrem a classe Classe adicionam cattr_reader e cattr_writer. O ActiveSupport também faz isso e adiciona métodos com os mesmos nomes a ModuleNão tenho o código, mas tenho certeza de que quando você usa o Passenger, ele inclui a versão ActiveSupport 4.0 de cattr_reader/ cattr_writere explode nisso.

Minha solução seria substituir aws-s3pelo mais novo e funcionalaws-sdk

informação relacionada