乘客模块在 AWS Gem 上失败,出现“类变量名称”错误

乘客模块在 AWS Gem 上失败,出现“类变量名称”错误

开场免责声明:我对这个问题涉及的技术完全陌生。但是谷歌,她没有取得成果。

我正在尝试将 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

相关内容