
免責聲明:我對這個問題所涉及的技術都是新手。但谷歌搜尋後,她卻沒有結出果實。
我正在嘗試將 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