![O módulo do passageiro falha no AWS Gem com o erro 'Nome da variável de classe'](https://rvso.com/image/632759/O%20m%C3%B3dulo%20do%20passageiro%20falha%20no%20AWS%20Gem%20com%20o%20erro%20'Nome%20da%20vari%C3%A1vel%20de%20classe'.png)
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-s3
estar fazendo algo mau. Se você observar o código nesse rastreamento de pilha, verá que eles abrem a classe Class
e adicionam cattr_reader e cattr_writer. O ActiveSupport também faz isso e adiciona métodos com os mesmos nomes a Module
Nã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_writer
e explode nisso.
Minha solução seria substituir aws-s3
pelo mais novo e funcionalaws-sdk