Ruby on Rails Rake在将rails项目从4.1.9更新到4.2.0后抛出“不正确的表名”错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ruby on Rails Rake在将rails项目从4.1.9更新到4.2.0后抛出“不正确的表名”错误相关的知识,希望对你有一定的参考价值。
我在过去几个月一直致力于一个项目,最初是在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'
更新过程遵循HERE使用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
的价值是零
不幸的是,我仍然足够新的ruby / rails我很难找到table_name值(schema_migrations,customers,nil,...)实际设置的位置。
有人可以帮助指出表格列表的来源,即构建schema_cache吗?
我遇到了同样的问题,并且能够解决它。在我的例子中,从ActiveRecord继承的基类包含belongs_to:foo语句。我把它移到基类的子类和加载的灯具。
所以,这是一个例子:
class BaseAwesomeModel < ActiveRecord::Base
self.abstract_class = true
# This is what was causing the issue, moved to subclasses
# belongs_to :something
end
class AnotherModel < BaseAwesomeModel
belongs_to :something
end
class YetAnotherModel < BaseAwesomeModel
belongs_to :something
end
我不确定这是否是导致你的灯具无法加载的原因,但这是我的问题的根源。
祝好运!
对于遇到此问题并且没有在基础(抽象)类中定义的关系的任何其他人,请注意:
范围也可能导致抽象类的这个问题(就像belongs_to为之前的回答者所做的那样),但显然如果你将它们移动到类方法它可以工作:
更改:
scope :scope_name, -> { #code }
至:
def self.scope_name
#code
end
我的问题实际上是由完全不同的东西引起的。我之前使用的是foreigner
gem,它的定义在迁移中看起来像这样:
change_table :table_name do |t|
t.remove_foreign_key :column_name
end
如果将这些移动到外键的新内化rails语法,它可以工作:
remove_foreign_key :table_name, :column_name
以上是关于Ruby on Rails Rake在将rails项目从4.1.9更新到4.2.0后抛出“不正确的表名”错误的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails:运行 rake 命令时出现错误消息
Ruby on Rails 和 Rake 问题:未初始化的常量 Rake::DSL
如何在 ruby on rails 的亚马逊 aws 服务器中使用 gem 执行 rake 任务?