Passenger-Modul schlägt auf AWS Gem mit dem Fehler „Klassenvariablenname“ fehl

Passenger-Modul schlägt auf AWS Gem mit dem Fehler „Klassenvariablenname“ fehl

Haftungsausschluss: Ich bin ein absoluter Neuling in den Technologien, die mit dieser Frage in Zusammenhang stehen. Aber Google trägt nicht die Früchte.

Ich versuche, eine Rails-App in die Produktion zu bringen. Diese App funktioniert mit WEBRick einwandfrei. Ich verwende auch das AWS-Gem, um Daten von S3 abzurufen.

Ich habe Nginx mit Passenger installiert und eingerichtet. Wenn ich die Seite aufrufe, die ich teste, erhalte ich diesen Fehler:

/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)

Ich vermute, dass irgendetwas an Nginx/Passenger/Who-Knows den AWS-Code blockiert, aber wenn ich WEBRick verwende, tritt dieser Fehler nicht auf.

Antwort1

Das liegt daran, dass aws-s3etwas Böses getan wird. Wenn Sie sich den Code in diesem Stacktrace ansehen, können Sie sehen, dass sie die Klasse öffnen Classund cattr_reader und cattr_writer hinzufügen. ActiveSupport macht das auch und fügt Methoden mit denselben Namen hinzu. ModuleIch habe den Code nicht, aber ich bin ziemlich sicher, dass, wenn Sie Passenger verwenden, die ActiveSupport 4.0-Version von cattr_reader/ eingeschlossen wird cattr_writerund dies in die Luft fliegt.

Meine Lösung wäre, sie aws-s3durch die neuere und funktionalere zu ersetzenaws-sdk

verwandte Informationen