![乘客模块在 AWS Gem 上失败,出现“类变量名称”错误](https://linux22.com/image/632759/%E4%B9%98%E5%AE%A2%E6%A8%A1%E5%9D%97%E5%9C%A8%20AWS%20Gem%20%E4%B8%8A%E5%A4%B1%E8%B4%A5%EF%BC%8C%E5%87%BA%E7%8E%B0%E2%80%9C%E7%B1%BB%E5%8F%98%E9%87%8F%E5%90%8D%E7%A7%B0%E2%80%9D%E9%94%99%E8%AF%AF.png)
开场免责声明:我对这个问题涉及的技术完全陌生。但是谷歌,她没有取得成果。
我正在尝试将 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