Назад | Перейти на главную страницу

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

Вступительное заявление об отказе от ответственности: я новичок в технологиях, связанных с этим вопросом. Но гуглила, она не приносила плодов.

Я пытаюсь развернуть приложение Rails в производстве. Это приложение отлично работает с WEBRick. Я также использую гем AWS для извлечения данных из 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, я не получаю этой ошибки.

Это связано с тем, что aws-s3 делает что-то злое. Если вы посмотрите на код в этой трассировке стека, вы увидите, что они открывают класс Class и добавьте cattr_reader и cattr_writer. ActiveSupport также делает это и добавляет методы с теми же именами в Module У меня нет кода, но я почти уверен, что когда вы используете Passenger, он включает версию ActiveSupport 4.0. cattr_reader/cattr_writer и взорвать на этом.

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