Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 升级到Ruby 2.2后出现Rails 3 ActiveRecord#size方法错误_Ruby On Rails_Ruby_Ruby On Rails 3_Activerecord_Upgrade - Fatal编程技术网

Ruby on rails 升级到Ruby 2.2后出现Rails 3 ActiveRecord#size方法错误

Ruby on rails 升级到Ruby 2.2后出现Rails 3 ActiveRecord#size方法错误,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,upgrade,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,Upgrade,我使用的一个应用程序是Rails 3.2.18和Active Record 3.2.18。它使用的是Ruby 2.0.0,但是今天DevOps的人需要升级到Ruby 2.2.4。一旦用户开始在网站上创造流量,一切都开始爆炸。管理员甚至无法访问活动管理员 经过一段时间的深入研究,我意识到我被一个我经常看到的错误所抛弃: NoMethodError: undefined method `name' for nil:NilClass 因为我的一些模型有一个name属性,所以我认为这就是罪魁祸首 长话

我使用的一个应用程序是Rails 3.2.18和Active Record 3.2.18。它使用的是Ruby 2.0.0,但是今天DevOps的人需要升级到Ruby 2.2.4。一旦用户开始在网站上创造流量,一切都开始爆炸。管理员甚至无法访问活动管理员

经过一段时间的深入研究,我意识到我被一个我经常看到的错误所抛弃:

NoMethodError: undefined method `name' for nil:NilClass
因为我的一些模型有一个
name
属性,所以我认为这就是罪魁祸首

长话短说,问题在于对活动记录调用
size
,该记录包含许多尚未加载到内存中的关系。以下是我如何在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\u实例。一些\u关系.count
将始终有效(尽管我确实理解
count
size
之间的区别)

我在这个问题上的发现出人意料地少。有一个相关的问题,但我不能证明这是我遇到的同一个问题


我现在要回滚升级到Ruby 2.2.4的版本,但我想知道是否有人能对此有所了解。Active Record 3.2.18和Ruby 2.2*之间是否存在缺陷?假设我需要升级到Ruby 2.2.4,那么这是升级Rails的唯一解决方案吗?

这确实是Rails 3.2.18(以及一些其他补丁版本)和Ruby 2.2*之间的冲突。这是有案可查的


除了更新到受支持的Rails版本(这对于某些生产应用程序可能不是可行的解决方案)之外,Rails版本还可以更新到branch:
3-2-stable

您可能感兴趣您应该尝试移动到Rails 3-2-stable,看看问题是否仍然存在。另外,在大小/数量上也有细微的差别,为什么你想在这里显示大小?我很惊讶有这么多用户在评论中给出答案;)。我没有选择,也没有参与这个特殊应用程序的决策。我有点像第八个签约开发人员,今天就开始着手解决这个问题:)。另外,我几乎不认为“内存中的其他数据库查询”和“总是数据库查询”是一个细微的区别,事实上,这可能是促使原始开发人员选择
size
而不是
count
的主要区别。还要感谢@spickermann和@Anthony的帮助,对于我来说,通过websearch很难找到Github问题(可能是因为它太旧了)。我只是碰巧在你发表评论的同时发现了它。