2016-02-12 55 views
3

我正在使用的應用程序是使用Rails 3.2.18和Active Record 3.2.18。它使用的是Ruby 2.0.0,但DevOps的某些人現在需要升級到Ruby 2.2.4。一旦用戶開始在網站上交通,一切都開始爆炸。管理員甚至無法訪問Active Admin。Rails 3升級到Ruby 2.2後的ActiveRecord #size方法錯誤

挖掘到這個相當長的一段時間後,我意識到我被錯誤我不斷看到揭去:

NoMethodError: undefined method `name' for nil:NilClass 

由於我的一些機型有name屬性,我認爲這是罪魁禍首。

長話短說,問題是在調用size上的一個活動記錄has_many關係尚未加載到內存中。下面是我如何在Rails的控制檯證明這一點:

model_instance = MyModel.find(12345) 
model_instance.some_relations.size 
# the error from above will be thrown (nomethoderror on name: for nil) 
model_instance.some_relations 
model_instance.some_relations.size 
# it works fine and produces expected output 

此外,model_instance.some_relations.count永遠是可行的(雖然我明白countsize之間的差異)。

在這個問題上,我發現令人驚訝的很少。有一個相關的GitHub issue here,但我不能證明它是相同問題我有。

我現在要回滾我的發佈升級到Ruby 2.2.4的版本,但想知道是否有人可以闡明這一點。 Active Record 3.2.18和Ruby 2.2之間是否存在缺陷?假設我需要升級到Ruby 2.2.4,唯一的解決方案是升級Rails嗎?

+1

你可能會對https://github.com/rails/rails/issues/18991#issuecomment-74886210 – spickermann

+1

感興趣,您應該嘗試着移至rails 3-2 stable,看看問題是否仍然存在。此外,尺寸/數量也有細微的差異,爲什麼你要在這裏尺寸? – Anthony

+0

我很驚訝有多少SO用戶在評論中發佈答案;)。我沒有選擇或參與這個特定應用程序的決定。我有點像第八個開發人員要簽約工作,只是今天就解決這個問題:)。此外,Id幾乎不會將「內存中的其他數據庫查詢」與「總是數據庫查詢」稱爲「細微」差異,事實上,它可能是*主要*差異,它促使原始開發人員選擇「大於」計數'。 – Todd

回答

0

這確實是Rails 3.2.18(和其他一些補丁版本)和Ruby 2.2。*之間的衝突。它被記錄在here

除了更新到受支持的Rails版本之外,Rails版本可能更新爲分支:3-2-stable

相關問題