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