![乘客模組在 AWS Gem 上失敗並出現「類別變數名稱」錯誤](https://rvso.com/image/632759/%E4%B9%98%E5%AE%A2%E6%A8%A1%E7%B5%84%E5%9C%A8%20AWS%20Gem%20%E4%B8%8A%E5%A4%B1%E6%95%97%E4%B8%A6%E5%87%BA%E7%8F%BE%E3%80%8C%E9%A1%9E%E5%88%A5%E8%AE%8A%E6%95%B8%E5%90%8D%E7%A8%B1%E3%80%8D%E9%8C%AF%E8%AA%A4.png)
免責聲明:我對這個問題所涉及的技術都是新手。但谷歌搜尋後,她卻沒有結出果實。
我正在嘗試將 Rails 應用程式部署到生產環境中。該應用程式使用 WEBRick 運行良好。我還使用 AWS gem 從 S3 檢索資料。
我已經使用 Passenger 安裝並設定了 Nginx。當我點擊正在測試的頁面時,出現以下錯誤:
/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