过去几个月我一直在研究一个项目,该项目最初是在 4.1.6 中开发的,现在我正在尝试将其更新到 4.2.0(我已经逐步测试了 4.1.6 和 4.2.0 之间的所有版本,并且所有 4.1.x 版本都可以正常工作,只有当我转到 4.2.0 时,我才看到我在此处描述的问题)。
在这个应用程序中,所有模型都有很多共享功能,所以我创建了一个抽象类,我的所有模型都继承自这个类。
class TrackableModel < ActiveRecord::Base
self.abstract_class = true
...
end
class User < TrackableModel
...
end
Gemfile 中唯一的变化是更改gem 'rails', '4.1.6'
为gem 'rails', '4.2.0'
更新过程遵循此处使用的说明rake rails:update
,并按照同一文档第 2 节中的升级步骤进行后续操作。
我用这个 rake 任务的默认值覆盖了所有有冲突的文件,但之后检查了每个文件并进行了修改。
更新前,所有测试通过,但更新后
130 runs, 0 assertions, 0 failures, 130 errors, 0 skips
有错误
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect table name '': SHOW FULL FIELDS FROM ``
Error:
xxxTest#test_yyy:
NoMethodError: undefined method `each' for nil:NilClass
该应用程序似乎可以在没有对用户体验进行任何更改的情况下运行。在我尝试执行测试之前,一切看起来都很好。
我只是无法让我的测试运行。
更新:
我忘了说我在跑步
ruby 2.1.5p273 (2014-11-13 revision 48405) [i386-mingw32].
此外,我一直在努力遵循执行路径。它在尝试设置固定装置时似乎失败了。它正在通过一个循环来构建表的 schema_cache。它查询 schema_migrations 和我的第一个自定义表“customers”(在此调用期间,它迭代了该表上似乎成功的每个列)。
在下一次调用
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.columns(table_name#String)
table_name
的值为 nil
不幸的是,我对 ruby/rails 还是很陌生,我很难找到 table_name 值(schema_migrations,customers,nil,...)的实际设置位置。
有人可以帮助指出构建 schema_cache 的表列表的来源吗?