Пассажирский модуль выходит из строя на AWS Gem с ошибкой «Имя переменной класса»

Пассажирский модуль выходит из строя на AWS Gem с ошибкой «Имя переменной класса»

Открытие Отказ от ответственности: Я новичок во всех технологиях, связанных с этим вопросом. Но Google, она не дает-a плод.

Я пытаюсь развернуть приложение Rails в production. Это приложение отлично работает с использованием WEBRick. Я также использую AWS gem для извлечения данных из S3.

Я установил и настроил Nginx с Passenger. Когда я захожу на страницу, которую тестирую, я получаю эту ошибку:

/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он делает что-то злое. Если вы посмотрите на код в этой трассировке стека, вы увидите, что они открывают класс Classи добавляют cattr_reader и cattr_writer. ActiveSupport также делает это и добавляет методы с теми же именами в ModuleУ меня нет кода, но я почти уверен, что когда вы используете Passenger, он включает версию ActiveSupport 4.0 cattr_reader/ cattr_writerи взрывается на этом.

Моим решением было бы заменить aws-s3его на более новый и более функциональный.aws-sdk

Связанный контент