乘客模組在 AWS Gem 上失敗並出現「類別變數名稱」錯誤

乘客模組在 AWS Gem 上失敗並出現「類別變數名稱」錯誤

免責聲明:我對這個問題所涉及的技術都是新手。但谷歌搜尋後,她卻沒有結出果實。

我正在嘗試將 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

相關內容