23

我正在尝试将我的 redmine 从 1.3.0 升级到 2.0.0,但是我在数据库迁移方面遇到了问题。当我运行命令时:

rake db:migrate RAILS_ENV=production

它显示一个错误,如

rake aborted!
uninitialized constant RAILS_ENV

我的错误日志是:

ActiveRecord::SubclassNotFound (The single-table inheritance mechanism failed to locate the subclass: 'GoogleAppsAuthSource'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite AuthSource.inheritance_column to use another column for that information.):
app/models/user.rb:139:in `try_to_login'
app/controllers/account_controller.rb:143:in `password_authentication'
app/controllers/account_controller.rb:138:in `authenticate_user'
app/controllers/account_controller.rb:30:in `login'

这是我在旧 redmine 中使用的插件列表:

  1. 谷歌应用插件

  2. Redmine 代码审查插件

  3. Redmine Hudson 插件

4

2 回答 2

74

如果其他人在这里绊倒,有两种方法可以解决问题

  1. 不要使用名为 type 的列。
  2. 手动将列名设置为无意义的名称:

    self.inheritance_column = :_type_disabled
    

    请参阅:http ://apidock.com/rails/ActiveRecord/Base/inheritance_column/class

于 2012-10-15T20:45:18.577 回答
21

单表继承错误可能是由type数据库中命名的列引起的。

如果 rails 遇到一个名为的列名type,它会假定它是一个具有子类的模型,因此类型会区分要使用的模型。我猜一些最初不是为 rails 构建的插件type在它的模型中使用了一个列,这会导致 Rails 失败。

于 2012-07-13T12:49:37.847 回答