![El módulo pasajero falla en AWS Gem con el error 'Nombre de variable de clase'](https://rvso.com/image/632759/El%20m%C3%B3dulo%20pasajero%20falla%20en%20AWS%20Gem%20con%20el%20error%20'Nombre%20de%20variable%20de%20clase'.png)
Descargo de responsabilidad de apertura: soy todo un novato en las tecnologías involucradas en esta pregunta. Pero los Googles no dieron frutos.
Estoy intentando implementar una aplicación Rails en producción. Esta aplicación funciona bien con WEBRick. También estoy usando la gema de AWS para recuperar datos de S3.
He instalado y configurado Nginx con Passenger. Cuando llego a la página que estoy probando, aparece este error:
/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)
Supongo que algo acerca de Nginx/Passenger/Who-Knows se está ahogando en el código de AWS, pero nuevamente, al usar WEBRick, no aparece este error.
Respuesta1
Se debe al hecho de que aws-s3
está haciendo algo malo. Si observa el código en ese seguimiento de la pila, puede ver que abren la clase Class
y agregan cattr_reader y cattr_writer. ActiveSupport también hace esto y agrega métodos con esos mismos nombres. Module
No tengo el código, pero estoy bastante seguro de que cuando usa Passenger, incluye la versión ActiveSupport 4.0 de cattr_reader
/ cattr_writer
y explota esto.
Mi solución sería reemplazar aws-s3
con el más nuevo y funcional.aws-sdk