![Passenger-Modul schlägt auf AWS Gem mit dem Fehler „Klassenvariablenname“ fehl](https://rvso.com/image/632759/Passenger-Modul%20schl%C3%A4gt%20auf%20AWS%20Gem%20mit%20dem%20Fehler%20%E2%80%9EKlassenvariablenname%E2%80%9C%20fehl.png)
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-s3
etwas Böses getan wird. Wenn Sie sich den Code in diesem Stacktrace ansehen, können Sie sehen, dass sie die Klasse öffnen Class
und cattr_reader und cattr_writer hinzufügen. ActiveSupport macht das auch und fügt Methoden mit denselben Namen hinzu. Module
Ich 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_writer
und dies in die Luft fliegt.
Meine Lösung wäre, sie aws-s3
durch die neuere und funktionalere zu ersetzenaws-sdk