开场免责声明:我对这个问题涉及的技术完全陌生。但是谷歌,她没有取得成果。
我正在尝试将 Rails 应用程序部署到生产环境中。此应用程序使用 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