web-dev-qa-db-ja.com

ActiveRecord :: SubclassNotFound

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. GoogleAppsプラグイン

  2. Redmineコードレビュープラグイン

  3. RedmineHudsonプラグイン

21
zam

他の誰かがここでつまずいた場合、問題を解決する2つの方法があります

  1. Typeという名前の列は使用しないでください。
  2. 列名を無意味なものに手動で設定します。

    self.inheritance_column = :_type_disabled
    

    参照: http://apidock.com/Rails/ActiveRecord/Base/inheritance_column/class

68
cbron

単一テーブル継承エラーは、データベース内のtypeという名前の列が原因である可能性があります。

Railsがtypeという列名に遭遇した場合、サブクラスを持つモデルであると想定されるため、タイプによって使用するモデルが識別されます。元々=用に構築されていないプラグインがあると思います。 Railsはモデルでtype列を使用しているため、Railsは失敗します。

17
Tigraine